= ΠΑΡΑΔΟΣΗ ΑΣΚΗΣΗΣ
Γεωργιλά Ιωάννα-Μαρία 47745
Ιωαννίδου Βασιλική 47682
// Metadata:
:description: ΠΑΡΑΔΟΣΗ ΑΣΚΗΣΗΣ
:keywords: doc
:data-uri:
:toc: right
:toc-title: Πίνακας περιεχομένων
:toclevels: 4
:source-highlighter: highlight
:icons: font
:sectnums: 

{empty} +


[[cheat-clone]]
== DOCKER

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

image:./Docker_(container_engine)_logo.png[alt="Arduino.",width=250,height=250]

== Άσκηση

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

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

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

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

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

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

=== Tasks

==== Allow Internet connection 

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

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

==== Allow **only** connection from Network A -> B, B -> A  port 80

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

- *vim /etc/shorewall/interfaces*

image:./interfaces.png[alt="Arduino.",width=500,height=500]

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

- *vim /etc/shorewall/zones*

image:./zones.png[alt="Arduino.",width=500,height=500]

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

- *vim /etc/shorewall/masq*

image:./masq.png[alt="Arduino.",width=500,height=500]

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

- *vim /etc/shorewall/policy*

image:./policy.png[alt="Arduino.",width=500,height=500]

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

- *vim /etc/shorewall/rules*

image:./rules.png[alt="Arduino.",width=500,height=500]

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

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

==== 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.

image:./ssh-local2.png[alt="Arduino.",width=500,height=500]

Για να υλοποιήσουμε την παραπάνω σηράγγωση, πρέπει πρώτα να εγκαθιδρύσουμε μία σηράγγωση 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*

==== 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

image:./parousiash4-9-728.jpg[alt="Arduino.",width=500,height=500]







