Maria_Christoforidou
5 years ago
3 changed files with 4820 additions and 0 deletions
@ -0,0 +1,145 @@ |
|||
= Εργασία ΑΔΕ - Καμπεράκης Ιωάννης 47254 & Χριστοφορίδου Μαρία 47131 |
|||
// Metadata: |
|||
:description: Sec |
|||
:keywords: doc |
|||
:data-uri: |
|||
:toc: right |
|||
:toc-title: Πίνακας περιεχομένων |
|||
:toclevels: 4 |
|||
:source-highlighter: highlight |
|||
:icons: font |
|||
:sectnums: |
|||
|
|||
|
|||
|
|||
{empty} + |
|||
[[cheat-clone]] |
|||
|
|||
== Μέρος Α: Δημιουργία και ρύθμιση των δικτύων. |
|||
|
|||
NOTE: Το **Docker** είναι μια πλατφόρμα που πακετάρει μια εφαρμογή και όλα της τα dependencies μαζί σε μορφή containers, δηλαδή απομονωμένες Περιοχές Χρήστη (User Spaces). Το πακετάρισμα αυτό σε containers που παρέχει το docker δίνει στην εφαρμογή τη δυνατότητα να δουλεύει σε οποιοδήποτε περιβάλλον. Έτσι αποφεύγεται η χρήση επιπλέον υπολογιστικών πόρων που θα απαιτούσε μια Εικονική Μηχανή (Virtual Machine). |
|||
|
|||
=== Δημιουργία Docker Container |
|||
[source,bash] |
|||
---- |
|||
swarmalb-sec create |
|||
swarmlab-sec up size=5 |
|||
swarmlab-sec login |
|||
sudo su |
|||
ssh docker@<master_IP> |
|||
sudo su |
|||
---- |
|||
Έτσι έχουμε συνδεθεί στο master. |
|||
|
|||
=== Δημιουργία Εικονικών Δικτύων στο Docker |
|||
Δημιουργούμε τα δίκτυα που μας χρειάζονται. |
|||
[source,bash] |
|||
---- |
|||
docker network create --driver=bridge --subnet=<network_IP/mask> <name_of_network> |
|||
---- |
|||
|
|||
=== Σύνδεση των Eικονικών Ηosts στα Παραπάνω Δίκτυα |
|||
Χρησιμοποιούμε την εντολή όσες φορές χρειάζεται για όσα δίκτυα και hosts θέλουμε. |
|||
[source,bash] |
|||
---- |
|||
docker network connect <network_name> <host_name> |
|||
---- |
|||
|
|||
=== Σύνδεση Δικτύων με το Internet |
|||
Συνδεόμαστε σε όλους τους hosts των δικτύων μας για να τους δώσουμε σαν default gateway τον master. |
|||
[source,bash] |
|||
---- |
|||
swarmlab-sec login |
|||
sudo su |
|||
ssh docker@<host_IP> |
|||
sudo su |
|||
ip route add default via <master_ip_of_virt-net> dev <interface_of_virt-net> |
|||
---- |
|||
|
|||
=== Επικοινωνία Δικτύων Α και Β |
|||
Ανοίγουμε το αρχείο /etc/shorewall/rules και προσθέτουμε τις ανάλογες γραμμές έτσι ώστε τα δίκτυα μας να έχουν επικοινωνία στην πόρτα 80 ως εξής: |
|||
|
|||
|
|||
.#/etc/shorewall/rules# |
|||
[source,bash] |
|||
---- |
|||
ACCEPT netA netB tcp 80 |
|||
ACCEPT netB netA tcp 80 |
|||
---- |
|||
|
|||
=== Ρύθμιση των Περιεχομένων των Rules, Interfaces, Zones, Policy, Masq και Resolv.conf |
|||
[source,bash] |
|||
---- |
|||
nano /etc/shorewall/rules |
|||
nano /etc/shorewall/interfaces |
|||
nano /etc/shorewall/zones |
|||
nano /etc/shorewall/policy |
|||
nano /etc/resolv.con (ορίζουμε το nameserver) |
|||
---- |
|||
{empty} + |
|||
|
|||
== Μέρος Β: Tunneling |
|||
NOTE: Το **SSH Tunneling** είναι μία μέθοδος δημιουργίας ασφαλών απομακρυσμένων συνδέσεων και μεταφοράς αρχείων πάνω από μη-έμπιστα δίκτυα με μια κρυπτογραφημένη SSH σύνδεση. Προσφέρει έναν τρόπο να μεταφερθεί με ασφάλεια κίνηση οποιασδήποτε εφαρμογής με χρήση port forwarding(tunneling TCP/IP ports over SSH). Αυτό σημαίνει πως η κίνηση δεδομένων της εφαρμογής κατευθύνεται σε μία ασφαλή SSH σύνδεση ώστε να μην μπορεί να υποκλαπεί κατά τη διάρκεια της μεταφοράς. Επίσης, προσφέρει πρόσθετη ασφάλεια σε εφαρμογές legacy που δεν υποστηρίζουν κρυπτογράφηση. |
|||
|
|||
Για να δημιουργήσουμε αυτή τη σηράγγωση πρέπει πρώτα να γίνει σύνδεση του υπολογιστή μας (HOST) από τη θύρα 9000 με τη θύρα 8080 του MASTER και στη συνέχεια άλλη μια σύνδεση του MASTER με τη θύρα 80 του WORKER ο οποίος θα παρέχει το service που χρειαζόμαστε. |
|||
|
|||
image::tunneling.png[] |
|||
|
|||
[source,bash] |
|||
---- |
|||
ssh -tL 9000:localhost:8080 <user>@<master_IP> ssh -L 8080:localhost:80 <user>@<worker_IP> |
|||
---- |
|||
{empty} + |
|||
|
|||
== Μέρος Γ: VPN |
|||
|
|||
NOTE: Ένα **Εικονικό Ιδιωτικό Δίκτυο** (συνήθως αναφέρεται σαν **VPN**, Virtual Private Network) είναι ένα δίκτυο που χρησιμοποιεί κατά κύριο λόγο δημόσια τηλεπικοινωνιακή υποδομή, όπως το Διαδίκτυο, και δίνει τη δυνατότητα σε απομακρυσμένους χρήστες να έχουν πρόσβαση σε ένα κεντρικό οργανωτικό δίκτυο. Συνήθως απαιτεί από τους απομακρυσμένους χρήστες του δικτύου πιστοποίηση, και συχνά ασφαλίζει τα δεδομένα με τεχνολογίες κρυπτογράφησης για να εμποδιστεί η διάδοση των ιδιωτικών πληροφοριών σε μη εξουσιοδοτημένους τρίτους. Έτσι, δίνει τη δυνατότητα στους χρήστες να στέλνουν και να λαμβάνουν δεδομένα σε κοινόχρηστα ή δημόσια δίκτυα σαν να ήταν απευθείας συνδεδεμένες οι υπολογιστικές τους συσκευές με το ιδιωτικό δίκτυο. |
|||
|
|||
Δημιουργούμε ένα VPN από την πλευρά του worker και φτιάχνουμε ένα χρήστη με τον οποίο θα συνδεθεί ο host μας στο VPN. |
|||
|
|||
=== Δημιουργία Δικτύου που θα Παρέχει το VPN |
|||
|
|||
[source,bash] |
|||
---- |
|||
docker network create --attachable=true --driver=bridge --subnet=<network_IP> --gateway=<gateway_IP> <docker_nw_name> |
|||
---- |
|||
|
|||
=== Εκτέλεση του Container |
|||
|
|||
[source,bash] |
|||
---- |
|||
docker run --net=none -it -v <physical_dir_path_to_save_data>:<virtual_path> --rm <docker_image> ovpn_genconfig -u udp://<server_IP:server_port> \ -N -d -c -p "route <network_IP> <network_mask>" -e "topology subnet" -s <VPN_network_IP> |
|||
---- |
|||
|
|||
=== Δημιουργία Κλειδιών για Σύνδεση Χρήστη |
|||
|
|||
[source,bash] |
|||
---- |
|||
docker run --net=none -v <physical_dir_path_to_save_data>:<virtual_path> --rm -it <docker_image> ovpn_initpki |
|||
---- |
|||
|
|||
=== Δημιουργία VPN |
|||
|
|||
[source,bash] |
|||
---- |
|||
docker run --detach --name <VPN_name> -v <physical_dir_path_to_save_data>:<virtual_path> --net=<docker_nw_name> --ip=<VPN_host_IP> -p <physical_port>:<virtual_port>/udp --cap-add=NET_ADMIN <docker_image> |
|||
---- |
|||
|
|||
=== Δημιουργία Χρήστη |
|||
|
|||
[source,bash] |
|||
---- |
|||
docker run -v <physical_dir_path_to_save_data>:<virtual_path> --rm -it <docker_image> easyrsa build-client-full <client_name> nopass |
|||
---- |
|||
|
|||
=== Αποστολή Ρυθμίσεων Χρήστη σε Αρχείο |
|||
|
|||
[source,bash] |
|||
---- |
|||
docker run -v <physical_dir_path_to_save_data>:<virtual_path> --log-driver=none --rm <docker_image> ovpn_getclient <client_name> > <path/filename.ovpn> |
|||
---- |
|||
|
|||
IMPORTANT: Το παραπάνω αρχείο πρέπει να αποσταλεί από τον host στον χρήστη του VPN ώστε να μπορεί να συνδεθεί. Για την πραγματοποίηση της σύνδεσης, ο χρήστης θα πρέπει να εκτελέσει την εντολή openvpn --config <filename.ovpn>. |
|||
|
|||
|
|||
|
File diff suppressed because it is too large
After Width: | Height: | Size: 42 KiB |
Loading…
Reference in new issue