Είσαι σε κάποιο IRC κανάλι και έχει ξεκινήσει μια ωραιότατη συζήτηση που δεν θες να χάσεις αλλά θα πρέπει να κλήσεις το laptop σου γιατί πρέπει να το πάρεις μαζί σου με αποτέλεσμα να χάσεις όλη την συνομιλία. Μήπως πρέπει να στήσεις έναν ZNC Bouncer να στα κρατάει;

Στον προηγούμενο οδηγό μας, είδαμε την Σύνδεση σε ελληνικά κανάλια IRC Freenode μέσω δικτύου Tor όπου ρυθμίσαμε τον HexChat (client) να συνδέεται στο Freenode IRC (server) μέσω του Tor δικτύου.

Αν χρησιμοποιείτε μια στο τόσο το IRC έχει καλώς. Αν όμως το χρησιμοποιείτε συχνά όπως εμείς που έχουμε το κανάλι #cerebrux στο Freenode, τότε θέλετε να:

  • διατηρήσετε το Nickname σας (ακόμα και registered να είναι, αν έχετε να μπείτε μήνες, το χάνετε)
  • διατηρήσετε την συνομιλία που έχει γίνει ενώ λείπατε.

Για να το πετύχουμε αυτό χρειαζόμαστε έναν «μεσάζοντα» που ονομάζεται ZNC Bouncer. Αντί λοιπόν να συνδεόμαστε στο Freenode απευθείας, συνδεόμαστε στο ZNC server μας, ο οποίος είναι μόνιμα συνδεδεμένος στο Freenode. BONUS: Θα το ρυθμίσουμε να συνδέεται μέσω Tor για να μην αποκαλύπτει την IP – Hostname του server μας.

Τι χρειαζόμαστε για τον ZNC server;

Το project μπορεί να υλοποιηθεί σε:

Στο παρόν άρθρο, χρησιμοποιήσαμε ένα VPServer των 5$ από την Digitalocean. Μπορείτε να δημιουργήστε έναν νέο λογαριασμό από το παρακάτω link και θα λάβετε 100$ credits για να τα χρησιμοποιήσετε μέσα σε 60 ημέρες:

Advertisements

Τι προσφέρει το ZNC;

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

Ένα άλλο πλεονέκτημα είναι ότι μπορούμε προαιρετικά να δημιουργήσουμε «client buffer». Αυτά είναι ξεχωριστά buffer για διαφορετικές συσκευές από τους οποίους θέλετε να συνδεθείτε. Αυτό διασφαλίζει ότι εάν συνδεθώ από τον υπολογιστή μου και από τον φορητό υπολογιστή μου, τα μηνύματα θα αναπαραχθούν σωστά και για τα δύο.

Αυτό είναι παρόμοιο με το πρόβλημα που επιλύει το IMAP email. Όπως είδαμε στον οδηγό IMAP vs POP3: Τι είναι το καθένα και ποιο πρέπει να χρησιμοποιήσετε; τα email μέσω POP3, αυτό κατεβάζει τα μηνύματα ηλεκτρονικού ταχυδρομείου από το server για μόνιμη τοπική αποθήκευση, ενώ το IMAP τα αφήνει στο server και απλά αποθηκεύει προσωρινά τα μηνύματα ηλεκτρονικού ταχυδρομείου τοπικά. Με άλλα λόγια αν έχετε διαχωρισμό με client buffers, τα μηνύματα θα διαχωρίζονται ανά συσκευή, και ότι έχετε διαβάσει, δεν θα ξανά κατεβαίνει σε άλλη συσκευή.

Γιατί να το συνδέσω μέσω Tor

Όταν χρησιμοποιούμε το IRC, «διαρρέουμε» πληροφορίες σχετικά με το hostname και την IP από την οποία συνδεόμαστε.

Αυτό είναι μη επιθυμητό εάν συνδέεστε απευθείας π.χ. στο Freenode ή έχετε έναν IRC bouncer, καθώς μπορεί να σας κάνει στόχο για άτομα που «αρέσκονται» στο να ψάχνουν για εμπάθειες (π.χ. με το εξαιρετικό Nmap). Σε γενικές γραμμές, όταν συμμετέχετε σε μια δημόσια διαδικτυακή κοινότητα καλό είναι να αποφεύγεται, εφόσον είναι δυνατόν, η αποκάλυψη αυτών των πληροφοριών.

Ας ξεκινήσουμε την εγκατάσταση του ZNC

Σε αυτό το σημείο υποθέτω οτι:

  1. Έχετε ήδη φτιάξει έναν λογαριασμό στο Freenode και συνδέεστε με SASL
  2. Συνδέεστε απευθείας στο Freenode με το HexChat (χωρίς Tor))
  3. Έχετε ένα VPS στημένο σε Ubuntu 18.04 Server
  4. Έχετε αφιερώσει τα πρώτα 10 λεπτά για βασικές ρυθμίσεις ασφαλείας
  5. Έχετε κάνει τα 10 απλά βήματα για ένα ασφαλές SSH

Εγκατάσταση του ZNC

Στον VPServer μας κάνουμε εγκατάσταση το znc:

sudo apt update && sudo apt install -y znc

Εγκατάσταση Tor:

sudo su -
printf "deb https://deb.torproject.org/torproject.org bionic main\ndeb-src https://deb.torproject.org/torproject.org bionic main\n" > /etc/apt/sources.list.d/tor.list
curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --import
gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -
logout
cat /etc/apt/sources.list.d/tor.list
deb https://deb.torproject.org/torproject.org bionic main
deb-src https://deb.torproject.org/torproject.org bionic main
sudo apt update && sudo apt install -y tor deb.torproject.org-keyring

Εγκατάσταση Proxychains

Στη συνέχεια πρέπει να εγκαταστήσουμε το proxychains (μεσολάβηση) και να συνδέσουμε την επίσημη διεύθυνση Tor του Freenode (προσοχή: ελέγξτε αν έχει αλλάξει):

ajnvpgl6prmkb7yktvue6im5wiedlz2w32uhcwaamdiecdrfpwwgnlqd.onion

σε μια τοπική IP του server που ήμαστε σίγουροι ότι δεν θα χρησιμοποιηθεί πουθενά και από τίποτα (έστω την 10.99.99.90).

sudo apt install -y proxychains
printf "mapaddress 10.99.99.90 ajnvpgl6prmkb7yktvue6im5wiedlz2w32uhcwaamdiecdrfpwwgnlqd.onion\n" | sudo tee -a /etc/tor/torrc
sudo systemctl daemon-reload
sudo systemctl restart tor

Αρχική Ρύθμιση του ZNC

Τώρα που είναι εγκατεστημένο το Tor, μπορούμε να ασχοληθούμε με το ZNC και τη σύνδεση του στο freenode μέσω του Tor. Θέλουμε το ZNC να λειτουργεί ως υπηρεσία του συστήματος:

sudo useradd --create-home -d /var/lib/znc --system --shell /sbin/nologin --comment "Account to run ZNC daemon" --user-group znc

στην συνέχεια ξεκινάμε την ρύθμιση του ZNC server μας:

sudo -u znc /usr/bin/znc --datadir=/var/lib/znc --makeconf

απαντώντας στις ερωτήσεις που μας κάνει

απαντώντας στις ερωτήσεις που μας κάνει

Σημαντικό να θυμάστε το Admin User name και το συνθηματικό που βάλατε και την port στην οποία ακούει το ZNC WebPanel.

Τώρα δημιουργήστε μια systemd unit για το znc.

sudo vim /etc/systemd/system/znc.service
[Unit]
Description=ZNC, an advanced IRC bouncer
After=network-online.target

[Service]
ExecStart=/usr/bin/znc -f --datadir=/var/lib/znc
User=znc

[Install]
WantedBy=multi-user.target

και ξεκινήστε την υπηρεσία znc που φτιάξατε παραπάνω:

sudo systemctl enable --now znc.service
Advertisements

Σύνδεση στο Web Panel του ZNC

Τώρα, αφού πείτε στον firewall να ανοίξει την πόστα που δηλώσατε στην αρχή της ρύθμισης του ZNC, συνδεθείτε στο Web Panel του

https://<IP tou server mou>:<Port tou ZNC>/

και πάτε στις ρυθμίσεις Global settings και προσθέστε μια συγκεκριμένη θύρα για συνδέσεις με SSL στο IRC (π.χ. την 6697 με SSL, IPv4, IPv6, IRC, χωρίς όμως Web πρόσβαση) την οποία δεν ξεχνάμε να ανοίξουμε και στο firewall όπως κάναμε και για την πόρτα του ZSH (εδώ π.χ. είναι η 8000):

την 6697 με SSL, IP4, IP6, IRC χωρίς όμως Web πρόσβαση

Στη συνέχεια πρέπει να τροποποιήσουμε το systemd unit μας έτσι ώστε το ZNC να φορτώνεται μέσω διακομιστών μεσολάβησης (proxychains).

sudo vim /etc/systemd/system/znc.service
[Unit]
Description=ZNC, an advanced IRC bouncer
After=network-online.target

[Service]
ExecStart=/usr/bin/proxychains /usr/bin/znc -f --datadir=/var/lib/znc
User=znc

[Install]
WantedBy=multi-user.target

κάντε επανεκκίνηση το znc:

sudo systemctl daemon-reload
sudo systemctl restart znc.service

Διαμόρφωση του ZNC Bouncer για σύνδεση στο Freenode

Μεταβείτε στην ενότητα Your settings και, στη συνέχεια, κάντε κλικ στην επιλογή Add στην ενότητα Networks.

επιλογή Add στην ενότητα Networks

Οι ρυθμίσεις δεν διαφέρουν από μια τυπική σύνδεση στο freenode με μόνο διαφορά στο σημείο Servers of this IRC network όπου γράφουμε την IP που ρυθμίσαμε στα proxychains και την port στο ZNC. Παρακάτω ενεργοποιούμε και κάποια module:

Σύνδεση του HexChat με το ZNC

Τώρα πρέπει να συνδεθούμε στο ZNC bouncer από το HexChat. Στον server μας, πρέπει πρώτα να πάρουμε το fingerprint πιστοποιητικού SSL που δημιουργήθηκε κατα την ρύθμιση του ZNC:

sudo -u znc cat /var/lib/znc/znc.pem | openssl x509 -sha512 -fingerprint -noout | tr -d ':' | tr 'A-Z' 'a-z' | cut -d = -f 2

Πάμε στο HexChat και από το μενού Network List αφού βάλουμε το User Name του Admin του ZNC και το Nick Name μας, πατάμε Add για να προσθέσουμε τον ZNC server μας (π.χ. freenode-znc) όπου ρυθμίζουμε:

  • Πατάμε Edit και βάζουμε : IP_tou_ZNC_server/SSL_Port
  • Connect to selected server only
  • Connect to this network automatically
  • Use SSL..
  • Accept invalid SSL
  • Use Global user info…
  • Login Method: Server password (/PASS password)
  • Password: το συνθηματικό του ZNC

Έπειτα συνδεθείτε στο freenode-znc ή όπως το ονομάσατε. Λίγο αργότερα, θα εμφανιστεί ένα buffer στην αριστερή γραμμή που ονομάζεται *status. Εκεί θα δείτε πολλές πληροφορίες σχετικά με ένα πιστοποιητικό SSL, και η έξοδος θα με κάτι τέτοιο:

If you trust this certificate do this /znc AddTrustedServerFingerprint:43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8
Disconnected From IRC. Reconnecting...

Αυτό είναι ένα μήνυμα από τον ZNC server μας, που μας ζητά να εγκρίνουμε το πιστοποιητικό SSL που παρουσιάζει το freenode στο ZNC καθώς επιχειρεί να συνδεθεί εκ μέρους μας. Από προεπιλογή, το HexChat δεν θα μεταδίδει εντολές που δεν αναγνωρίζει, επομένως πρέπει να προσθέσουμε στη λίστα επιτρεπόμενων εντολών το /znc τρέχοντας τα παρακάτω:

/alias add znc /quote znc

Θα ακολουθήσουμε τώρα τις οδηγίες του μηνύματος του ZNC και θα εμπιστευτούμε αυτό το fingerprint τρέχοντας την εντολή που μας έδωσε μαζί με το fingerprint:

/znc AddTrustedServerFingerprint 43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8

Φυσικά εσείς θα βάλετε το fingerprint που σας έδωσε. Στην συνέχεια θα σας εμφανήσει ένα άλλο σφάλμα:

Error from server [Closing link ...(SASL Access Only)]
Disconnected From IRC. Reconnecting...
Advertisements

πράγμα φυσιολογικό, διότι σύμφωνα και με την επίσημη τεκμηρίωση του Freenode, η πρόσβαση στην Tor υπηρεσία επιτρέπεται μόνο με SASL και όχι με PLAIN που συνδεθήκαμε εμείς. Πάμε να αποσυνδεθούμε τρέχοντας:

/DISCON -all

Ρύθμιση certificate-based SASL πιστοποίησης

Πάμε στον server μας και γράφουμε :

sudo vim /etc/ssl/openssl.cnf

Όπου κάνουμε αναζήτηση την λέξη RANDFILE (στο vim πατάμε / γράφουμε αυτό που ψάχνουμε και πατάμε Enter. Για να πάμε στην επόμενη εγγραφή που βρέθηκε πατάμε n) για την οποία θα βρούμε δύο εγγραφές στις οποίες βάζουμε # στην αρχή της.

#RANDFILE  = $ENV::HOME/.rnd
#RANDFILE  = $dir/private/.rand

Αποθηκεύουμε και κλείνουμε (: x) . Τώρα μπορούμε να δημιουργήσουμε το πιστοποιητικό μας χωρίς να μας εμφανίσει σφάλμα το openssl στην δημιουργία του.

openssl req -nodes -newkey rsa:4096 -keyout user.pem -x509 -days 1000 -out user.pem -subj "/CN=To_NickName_Sou"

Σημείωση: Το πιστοποιητικό θα ισχύει για 1000 ημέρες, και στο CN= εσείς προσθέστε το δικό σας nick.

Λογικά θα έχει δημιουργηθεί το πιστοποιητικό μας με όνομα user.pem. Πριν το μεταφέρουμε στον φάκελο του ZNC, ας καταγράψουμε το fingerprint του (θα το χρειαστούμε μετά):

openssl x509 -in user.pem -outform der | sha1sum -b | cut -d \  -f1
80194ce49a249124fd8d9e11fef609c1c5c745ff

Σημείωση: Στο \ -f1 είναι δύο κενά οι απόσταση.

Τώρα που έχουμε αποκτήσει ένα πιστοποιητικό και υπολογίσαμε το fingerprint του, ας το μεταφέρουμε στο σημείο όπου μπορεί να το βρει το cert module που είχαμε ενεργοποιήσει στο Web Panel του ZNC:

sudo chown znc:znc user.pem
sudo mv user.pem /var/lib/znc/users/O_ZNC_Admin_SOU/networks/freenode/moddata/cert/

Σημείωση: για να δείτε τον υποφάκελο στο /users/ δώστε sudo ls /var/lib/znc/users/ και το όνομα του υποφακέλου βάλτε το εκεί που γράφω στην εντολή O_ZNC_Admin_SOU

Στη συνέχεια, πρέπει να ενημερώσουμε τον NickServ του freenode για το fingerprint του πιστοποιητικού μας (user.pem). Επειδή δεν έχουμε ακόμη λειτουργική σύνδεση μεταξύ Freenode και ZNC, θα ξανα χρησιμοποιήσουμε στο HexChat την κλασσική σύνδεση με το Freenode.

Αφού συνδεθείτε με τον λογαριασμό σας στο Freenode δώστε:

/msg NickServ cert add 80194ce49a249124fd8d9e11fef609c1c5c745ff

για να ενημερώσουμε τον NickServ για το πιστοποιητικό μας (εσείς θα βάλετε το δικό σας). Μπορούμε να ελέγξουμε αν έγινε σωστά η εισαγωγή:

/query NickServ cert list

Αν κάποιο fingerprint δεν έπρεπε να είναι εκεί, η μπήκε κάποιο γράμμα κατά λάθος, μπορούμε να το διαγράψουμε με:

/msg NickServ cert del TO_LATHOS_FINGERPRINT

Αυτό ήταν το μόνο που είχαμε να κάνουμε στο Freenode, οπότε ας αποσυνδεθούμε και να επανασυνδεθούμε στο ZNC μας μέσω του HexChat.

Advertisements

Σύνδεση του ZNC στο Freenode μέσα από το HexChat

Μόλις συνδεθούμε στο freenode-znc ή όπως ονομάσατε την δική σας εγγραφή για τον ZNC server σας, τρέξτε το παρακάτω για να σιγουρευτούμε ότι βλέπει το πιστοποιητικό user.pem

/query *cert info

<*cert> You have a certificate in: /var/lib/znc/users/your_nickname/networks/freenode/moddata/cert/user.pem

Όπως βλέπετε ο ZNC μας επιστρέφει στο HexChat την διαδρομή που είχαμε μεταφέρει το user.pem πιστοποιητικό μας.

Στη συνέχεια πρέπει να πούμε στη SASL module του ZNC να χρησιμοποιήσει το πιστοποιητικό μας:

/query *sasl Mechanism
/query *sasl Mechanism EXTERNAL

Τώρα άν πάμε στο *status buffer θα δούμε ότι θα μας πει Connected!

Και τώρα, η στιγμή για την οποία κάναμε τόσο κόπο όλοι… μπείτε μέσω του Μενού Server –> Join a Channel και να γράψετε #cerebrux για να μπείτε στο κανάλι μας,

γράψετε #cerebrux για να μπείτε στο κανάλι μας

ή εναλλακτικά μπορείτε να γράψετε την εντολή στο παράθυρο του freenode:

/join #cerebrux  

και να μας πείτε ένα γεια σας από tor

Για περισσότερες εντολές, δείτε το cheat-sheet που ανεβάσαμε στο αποθετήριό μας:

Επίλογος για HexChat – ZNC – Tor – Freenode

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

Πετύχαμε μια ασφαλής σύνδεση, απόκρυψη του server μας και μάθαμε κάποια βασικά στοιχεία ρύθμισης SASL και ZNC. Σε επόμενα, άρθρα ίσως ασχοληθούμε με την δημιουργία λογαριασμών στο ZNC για να προσθέσουμε φίλους, οι ομάδες, την δημιουργία καναλιών (ομάδων) στο Freenode κλπ.

Παραπομπές: