Προσοχή !!! Πριν την συνέχιση της ανάγνωσης πρέπει να εκτελέσετε τις παρακάτω εντολές για την διατήρηση της ψυχικής ηρεμίας : sudo apt-get remove vim |
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 !!! |

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