Προσοχή !!! Πριν την συνέχιση της ανάγνωσης πρέπει να εκτελέσετε τις παρακάτω εντολές για την διατήρηση της ψυχικής ηρεμίας :

sudo apt-get remove vim
sudo apt-get purge vim
sudo apt-get install nano

"I’ve been using VIM for about 2 years now mostly because i dont know how to exit it…​"

1. Docker

1.1. Τι είναι το Docker

    To Docker είναι μια πλατφόρμα λογισμικού ανοιχτού κώδικα που υλοποιεί Virtualization σε επίπεδο Λειτουργικού Συστήματος.
Ουσιαστικά το Docker προσφέρει δυνατότητες ανάπτυξης εφαρμογών στα Containers του. Το Docker χρησιμοποιεί τεχνολογιές του πυρήνα του Linux όπως τα cgroups (ομάδες λογαριασμών που ελέγχεται το ποσοστό χρήσης του υλικού του υπολογιστή μας), namespaces (το namespaces δημιουργεί ανεξάρτητα πακέτων πόρων και διεργασιών) έτσι ώστε τα ανεξάρτητα software containers που δημιουργεί να εκτελούνται στο ίδιο λειτουργικό σύστημα. Έτσι αποφεύγεται η χρήση επιπλέον υπολογιστικών πόρων που θα απαιτούσε μια εικονική μηχανή (virtual machine).

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

Για την δημιουργία δικτύων προς χρήση μέσα στα containers του Docker εκτελούμε σε ένα τερματικό την πακάτω εντολή :

docker network create --driver=bridge --subnet=subnet_IP/Preffix Network_Name

1.3. Δημιουργία δικτύων στους containers

Στην συνέχεια με την παρακάτω εντολή καθορίζουμε σε ποια δίκτυα θα συνδεθούν τα container που θέλουμε:

docker network connect Network_Name Container_Name

1.3.1. Σύνδεση με το Internet

Για την σύνδεση κάποιου container με το internet θα πρέπει να ρύθμίσουμε ως Gateway τον Host υπολογιστή μας

ip route add default via Host_Network_IP dev interface

1.3.2. Επικοινωνία Δικτύων A→ B και B→A

Για την επικοινωνία των δικτύων θα χρειαστεί να ρυθμίσουμε το Shorewall

Με την βοήθεια του προγράμματος nano και όχι VIM ανοίγουμε το αρχείο:

/etc/shorewall/zones

Στην συνέχεια συμπληρώνουμε στα κατάλληλα πεδία τις απαραίτητες ρυθμίσεις όπως:
Στο πεδίο ZONE θα είναι η ονομασία του δικτύου που θέλουμε να ελεγξουμε.
Στο πεδίο TYPE Καθορίζουμε τον τύπου της ζώνης.
# ZONE      TYPE      OPTIONS      IN_OPTIONS      OUT_OPTIONS
     fw         firewall
     net         ipv4
     loc         ipv4
    dmz        ipv4

Επειδή το shorewall ταιριάζει τις διευθύνσεις απο τα πακέτα με την σειρά που είναι δηλωμένα στο αρχείο σε περίπτωση που έχουμε εμφωλευμένες ζώνες καλό θα ήταν να εξασφαλίσουμε ότι η κύρια ζώνη είναι μετα απο τις υποζώνες !

Στην συνέχεία με την χρήση του προγράμματος nano ανοίγουμε το αρχέιο:

/etc/shorewall/policy

Στα πεδία του αρχείου γραφουμε τις πολιτικές που θέλουμε να εφαρμόσουμε στα πακέτα που καταφθάνουν στην διεπαφή. Στο πεδίο SOURCE την πηγή, στο πεδίο DEST τον προορισμό και εάν ταιριάξει με κάποιο πακέτο τότε εφαρμόζεται η πολιτή που έχουμε καθορίσει στο πεδίο POLICY

Οι πολιτικές που μπορούν να εφαρμοστούν είναι:
ACCEPT Με το Accept δέχεται τα πακέτα.
DROP Με το Drop απορρίπτει τα πακέτα (χωρίς ενημέρωση του αποστολέα).
REJECT Με το Reject απορρίπτει τα πακέτα (και στέλνει ενημέρωση στον αποστολέα).

#      SOURCE      DEST      POLICY      LOGLEVEL      LIMIT
             loc              net        ACCEPT
             net              all         DROP             info
             all                all         REJECT           info


Εν συνεχεία κάνοντας πάλι χρήση του προγράμματος nano ανοίγουμε το αρχείο :

/etc/shorewall/rules

Στο πεδίο ACTION γράφουμε την επιτρεπόμενη ενέργεια για τα δίκτυα που αντιστοιχίζονται με κάποια απο τις εγγραφές.
Στο πεδίο Source γράφουμε το δίκτυο της πηγής μας.
Στο πεδίο Dest γράφουμε τοδίκτυο προορισμού.
Στο πεδίο PROTO γράφουμε το είδος του πρωτοκόλλου που θα χρησιμοποιήσουμε.
Στο πεδίο DEST_PORT την θύρα προορισμού.
Στο πεδίο SOURCE_PORT την θύρα της πηγής.

Τα ονόματα των πεδίων δεν είναι αναγκάιο ούτε να υπάρχουν ούτε να έχουν αυτήν την ονομασία !!

# ACTION       SOURCE        DEST        PROTO        DEST_PORT        SOURCE_PORT
    ACCEPT            FW              net             udp                   53
    ACCEPT            net              FW             udp                   53
    ACCEPT            FW              net             tcp                    80
    ACCEPT            net              FW             tcp                    80


Τέλος (λογικά θα το έχεις καταλάβει μέχρι τώρα) κάνοντας χρήση του προγράμματος nano ανοίγουμε το αρχείο :

/etc/shorewall/interfaces

Στο πεδίο ZONE γράφουμε την ονομασία της ζώνης που καθορίσαμε στο αρχείο ZONES
Στο πεδίο ΙΝΤ γράφουμε την διεπαφή που θέλουμε να αντιστοιχίσουμε με την εκάστοτε ζώνη.
Στο πεδίο BROADCAST εάν βάλουμε την επιλογή detect τότε το shorewall θα ψάξει μόνο του να βρει την broacast διευθυνση του δικτύου.
Στο πεδίο OPTIONS μορούμε να βάλουμε διάφορες επιλογές για την διεπαφή της εγγραφής.

Τα ονόματα των πεδίων δεν είναι αναγκάιο ούτε να υπάρχουν ούτε να έχουν αυτήν την ονομασία !!

# ZONE      INT      BROADCAST      OPTIONS      
      net        eth0          
      loc         eth0          detect
      dmz       eth0        



2. SSH

2.1. Τι είναι το SSH.

    To SSH (Secure Shell) παρέχει στους χρήστες ένα ασφαλές, κρυπτογραφημένο μηχανισμό για σύνδεση , εκτέλεση εντολών και μεταφορά αρχείων.
Το SSH χρησιμοποιεί συνήθως την θύρα 22 για την σύνδεση ανάμεσα στον υπολογιστή σας και έναν άλλο υπολογιστή ή συσκευή στο Internet ή στο τοπικό σας δίκτυο.
Ένα κλασσικό παράδειγμα χρήσης του είναι διαχειριστές μίας εταιρείας να συνδέονταθ εξ'αποστάσεως για τον ελέγχου για τη διαχείριση των υπολογιστών των επιχειρήσεων τους.

2.2. Δημιουργια SSH Tunneling

Για την επίλυση του ερωτήματος θα πρέπει να γίνουν δύο συραγγώσεις δεσμέυοντας τις ζητούμες θύρες για κάθε μία απο αυτές .
Η πρώτη σύράγγωση θα είναι μεταξύ του υπολογιστή μας προς ένα conτainer (master) .
Στην συνέχεια πρέπει να δημιουργηθεί μία δευτερη συράγγωση απο το container (master) προς ένα άλλο container του σμήνους, στο οποίο θα πρέπει να βρίσκεται ο HTTP server (apache2).

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

Για τις ports του παραδέιγματος το λειτουργικό σύστημα δεν μας άφησε να τις δεσμέυσουμε, στην πράξη χρησιμοποιήσαμε ports μη δεσμευμένες απο το σύστημα, εκτός της 80 !!!
ssh edited



3. Virtual Private Network (VPN)

3.1. Τι είναι το VPN

To VPN είναι ένα εικονικό δίκτυο το οποιο προσφέρει ιδιωτική επικοινωνία πάνω σε ένα δημόσιο δίκτυο π.χ διαδίκτυο. Το VPN παρέχει δυνατότητες κρυπτογράφησης της επικοινωνίας και την χρήση διαπιστευτηρίων για την κάθε σύνδεση. Θα μπορούσαμε να πούμε οτι το VPN είναι μία ποιο οικονομική εναλλακτικη των μισθωμένων γραμμών .

3.2. Δημιουργια VPN server, χρήστη και σύνδεση του στον server

3.2.1. Network Create

docker network create --attachable=true --driver=bridge --subnet=subnet_IP/Preffix --gateway=Gateway_IP Network_Name

3.2.2. Container Configuration

Δημιουργούμε έναν φάκελο η χρησιμοποιούμε έναν ήδη υπάρχουν στον οποίο θα αποθηκευτούν οι ρυθμίσεις του VPN server για να γίνει η αντιγραφή τους στον container που θα τον εγκαταστήσουμε.
Για το παράδειγμά μας θα υποθέσουμε οτι ο φάκελος αυτός είναι:

/home/username/vpn_data


docker run --net=none -it -v /home/username/vpn_data:/etc/openvpn --rm registry.vlabs.uniwa.gr:5080/myownvpn ovpn_genconfig -u udp://Host_IP_Address:Port -N -d -c -p "route container Network_Address Subnet_Mask" -e "topology subnet" -s 10.65.0.0/16 (οι διευθύνσεις που θα εκχωρηθούν στους χρήστες που σύνδεόνται στον VPN Server).

3.2.3. Key Creation

Με την παρακάτω εντολή δημιουργούμε το Private Key του VPN server μας:

docker run --net=none -v /home/username/vpn_data:/etc/openvpn --rm -it registry.vlabs.uniwa.gr:5080/myownvpn ovpn_initpki

3.2.4. Create VPN

docker run --detach --name VPN_Server_NAME -v /home/username/vpn_data:/etc/openvpn --net=Docker_network_name --ip=VPN_Server_container_IP  -p 1112:1194/udp --cap-add=NET_ADMIN registry.vlabs.uniwa.gr:5080/myownvpn

3.2.5. User Creation

Με την παρακάτω εντολή δημιουργούμε έναν χρήστη με το όνομα της επιλογής μας χωρίς κωδικό πρόσβασης:

docker run -v /home/username/vpn_data:/etc/openvpn --rm -it registry.vlabs.uniwa.gr:5080/myownvpn easyrsa build-client-full VPN_username nopass




Any Question’s ???



187