1. DOCKER

Το DOCKER είναι μια πλατφόρμα ανοιχτού κώδικα (open source) και λειτουργεί σαν εικονική μηχανή. Το λογισμικό αυτό επιτρέπει σε ανεξάρτητες εφαρμογές να χρησιμοποιούν τον ίδιο πυρήνα Linux. Με αυτόν τον τρόπο αποφεύγεται η επιπλέον χρήση υπολογιστικών πόρων που θα απαιτούσε μια εικονική μηχανή.

Arduino.

2. Άσκηση

2.1. Δημιουργήστε δίκτυα στον docker HOST

Ανοίγουμε ένα terminal και σηκώνουμε το docker. Σε ένα δεύτερο terminal εκτελούμε την εντολή ifconfig για να βρούμε την IP μας και στην συνέχεια πληκτρολογούμε την εξής εντολή:

docker network create --driver=bridge --subnet=ipaddress/CIDR όνομα_δικτύου

2.2. Δημιουργήστε δίκτυα in docker container

Εκτελούμε την εντολή docker container ps για να βρούμε το όνομα του container που θέλουμε να συνδεθούμε. Έπειτα γράφουμε:

docker network connect όνομα_δικτύου όνομα_container

2.3. Tasks

2.3.1. Allow Internet connection

Ρυθμίζουμε σαν default διαδρομή την IP διεύθυνση του HOST μας και από ποιο interface θα βγει, για να επιτρέψουμε την σύνδεση στο Internet.

ip route add default via IP_HOST dev διεπαφή

2.3.2. Allow only connection from Network A → B, B → A port 80

Για να επιτρέψουμε μόνο την σύνδεση από τον Α → Β, Β → Α μέσω της πόρτας 80 κάνω τις εξής αλλαγές στο shorewall :

  • vim /etc/shorewall/interfaces

Arduino.

Προσθέτουμε το δίκτυο και την διεπαφή του.

  • vim /etc/shorewall/zones

Arduino.

Προσθέτουμε το δίκτυο και τον τύπο του.

  • vim /etc/shorewall/masq

Arduino.

Γράφουμε τα ονόματα των διεπαφών.

  • vim /etc/shorewall/policy

Arduino.

Προσθέτουμε τις επιτρεπόμενες κινήσεις από μέσα προς τα έξω και ανάποδα.

  • vim /etc/shorewall/rules

Arduino.

Προσθέτουμε την πόρτα και το πρωτόκολλο που θα χρησιμοποιήσει η επιτρεπόμενη κίνηση.

Κάνουμε restart το shorewall και έπειτα κάνουμε ping στον worker και βλέπουμε ότι τρέχει.

2.3.3. Open SSH Tunnel from NETWORK-A(port 80) → MASTER(port 8080) and connect from HOST → MASTER port 9000

Τι είναι όμως το SSH;

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

Arduino.

Για να υλοποιήσουμε την παραπάνω σηράγγωση, πρέπει πρώτα να εγκαθιδρύσουμε μία σηράγγωση SSH (local port forwarding) μεταξύ:

  • του υπολογιστή μας (HOST) και του master

  • του master και του worker.

ssh -t -L 9000:localhost:8080 user@IP_Address ssh -L 8080:localhost:80 user@IP_Address

2.3.4. Create VPN

Τι είναι όμως ένα VPN;

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

  • create network

Δημιουργία νέου δικτύου.

docker network create --attachable=true --driver=bridge --subnet=IP_Address/CIDR --gateway=Gateway_IP_Address όνομα_δικτύου

  • run container

Δημιουργούμε ένα φάκελο τον οποίο θα χρησιμοποιήσουμε για το VPN.

docker run --net=none -it -v Destination_file:/etc/openvpn --rm ovpn_όνομα ovpn_genconfig -u udp://IP_Address_HOST:Port \-N -d -c -p "route container διεύθυνση_δικτύου μάσκα_υποδικτύου" -e "topology subnet" -s IP_Address/CIDR (οι διευθύνσεις που παρέχονται από το VPN)

  • create pki

Δημιουργία κλειδιού.

docker run --net=none -v Destination_file:/etc/openvpn --rm -it ovpn_όνομα ovpn_initpki

  • create vpn

Δημιουργία εικονικού ιδιωτικού δικτύου.

docker run --detach --name όνομα_VPNSERVER -v Destination_file:/etc/openvpn --net=όνομα_δικτύου_DOCKER --ip=IP_container_VPNSERVER -p PORT_VPN:1194/udp --cap-add=NET_ADMIN ovpn_όνομα

  • create user

Δημιουργία χρήστη.

docker run -v Destination_file:/etc/openvpn --rm -it ovpn_όνομα easyrsa build-client-full όνομα_χρήστη_VPN nopass

Arduino.