pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
<h2id="_περιγραφή_και_προετοιμασία_του_συστήματος">1. Περιγραφή και Προετοιμασία του Συστήματος</h2>
<divclass="sectionbody">
<divclass="sect2">
<h3id="_προαπαιτούμενα">1.1. Προαπαιτούμενα</h3>
<divclass="paragraph">
<p>Για την υλοποίηση των ζητουμένων της εργασίας έγινε χρήση της πλατφόρμας του <ahref="http://docs.swarmlab.io/SwarmLab-HowTos/labs/Howtos/docker/install.adoc.html">Docker</a> καθώς και εγκατάσταση <ahref="http://docs.swarmlab.io/SwarmLab-HowTos/labs/sec/sec.adoc.html">Σμήνους</a> σύμφωνα με τις οδηγίες του εργαστηρίου.</p>
<divclass="title">Για τους σκοπούς των ερωτημάτων χρησιμοποιήσαμε ένα cluster αποτελούμενο από 5 οντότητες:</div>
<ul>
<li>
<p>Ένας master κόμβος ο οποίος αποτελεί συντονιστής για το σμήνος όσον αφορά τις διάφορες λειτουργίες του. Επιπρόσθετα αναλαμβάνει την αυτοματοποιημένη - μαζική εγκατάσταση λογισμικών που θα
χρησιμοποιηθούν από τα μέλη του σμήνους για την διεκπαιρέωση εργασιών</p>
</li>
<li>
<p>Τέσσερις worker κόμβοι οι οποίοι συμβάλουν στις ποικίλες διαδικασίες του συστήματος</p>
<p>Το εν λόγω script αναλαμβάνει να προετοιμάσει τον master κόμβο για τις διάφορες λειτουργίες που θα λάβουν χώρα στην σύνεχεια. Συγκεκριμένα:</p>
</div>
<divclass="ulist">
<ul>
<li>
<p>Απενεργοποιεί το αντίμετρο net.ipv4.tcp_syncookies. Το αντίμετρο SYN cookie αντιμετωπίζει περιστατικά IP Spoofing καθώς έχει σκοπό την αποτροπή του γεμίσματος της ουράς συνδέσεων με αποτελέσμα καινούργιες συνδέσεις να μην γίνονται αποδεκτές. Η απενεργοποίηση του αντίμετρου είναι απαραίτητη καθώς ο master θα λειτουργήσει σαν θύμα του DDoS Attack</p>
</li>
<li>
<p>Ενημερώνει την λίστα πακέτων του συστήματος</p>
</li>
<li>
<p>Εγκαθιστεί το εργαλείο ansible</p>
</li>
<li>
<p>Εγκαθιστεί το εργαλείο sshpass</p>
</li>
<li>
<p>Παραμετροποιεί κατάλληλα το config αρχείο του προγράμματος ansible</p>
<p>Εισάγει στο αρχείο inventory(το οποίο θα χρησιμοποιηθεί από το ansible) δύο κατηγορίες χρηστών. Η πρώτη κατηγορία απευθύνεται στους workers του Σμήνους
<p>Για την υλοποίηση μαζικών εγκαταστάσεων λογισμικού στα μέλη του σμήνους καθώς και ταυτόχρονη εκτέλεση προγραμμάτων έχουμε αναπτύξει το ακόλουθο script</p>
<p>Τρέχοντας το script ο χρήστης μπορεί να επιλέξει την λειτουργία που τον ενδιαφέρει. Η επεξήγηση των ansible playbooks θα πραγματοποιηθεί στην συνέχεια.</p>
</div>
<divclass="paragraph">
<p><br></p>
</div>
</div>
<divclass="sect2">
<h3id="_μεταφορά_scripts_στους_workers">1.5. Μεταφορά Scripts στους workers</h3>
<divclass="paragraph">
<p>Εκτελούμε το script execute_playbook.sh και στο μενού επιλογών εισάγουμε τον αριθμό 1 με αποτέλεσμα το ansible να εκτελέσει το playbook transfer_scripts.yml.</p>
<p>Εκτελούμε το script start_server.sh στον <strong>master</strong> κόμβο.</p>
</div>
<divclass="listingblock">
<divclass="title">start_server.sh</div>
<divclass="content">
<pre>#!/bin/bash
cd myserver
python -m SimpleHTTPServer 8000 &</pre>
</div>
</div>
<divclass="paragraph">
<p>Θέτουμε σε λειτουργία μία web υπηρεσία που εξυπηρετεί HTTP requests στην πόρτα 8000. Στον φάκελο myserver όπου εκκινούμε την υπηρεσία υπάρχει το αρχείο index.html</p>
</div>
<divclass="paragraph">
<p><br></p>
</div>
</div>
<divclass="sect2">
<h3id="_παράδειγμα_http_request">2.2. Παράδειγμα HTTP Request</h3>
<divclass="paragraph">
<p>Εκτελούμε το script curl.sh στον <strong>worker_1</strong>.</p>
<p>Βρίσκουμε δυναμικά την διεύθυνση IP του server και πραγματοποιούμε ένα HTTP request μέσω του εργαλείου curl. Ο server μας απαντάει με το αρχείο index.html.</p>
</div>
<divclass="listingblock">
<divclass="content">
<pre><!DOCTYPE html>
<html>
<body>
<h1>*Beep boop* the server is up and running</h1>
</body>
</html></pre>
</div>
</div>
<divclass="paragraph">
<p><br></p>
</div>
</div>
<divclass="sect2">
<h3id="_εγκατάσταση_εργαλείου_hping3_στους_workers">2.3. Εγκατάσταση Εργαλείου hping3 στους workers</h3>
<divclass="paragraph">
<p>Εκτελούμε το script execute_playbook.sh και στο μενού επιλογών εισάγουμε τον αριθμό 2 με αποτέλεσμα το ansible να εκτελέσει το playbook install_hping3.yml.</p>
<p>Το script start_ddos.sh βρίσκει δυναμικά την διεύθυνση του HTTP Server και εκτελεί DoS επίθεση μέσω του εργαλείου hping3. Ακολουθεί επεξήγηση των επιλογών της εντολής hping3:</p>
</div>
<divclass="ulist">
<ul>
<li>
<p>nohup: Φροντίζει ώστε η διεργασία που δημιουργείται να τρέχει στο παρασκήνιο</p>
</li>
<li>
<p>-S: Τα πακέτα που θα σταλθούν θα έχουν το SYN bit ενεργοποιημένο</p>
</li>
<li>
<p>-p 8000: Η πόρτα προορισμού θα είναι η 8000</p>
</li>
<li>
<p>--rand-source: Κάθε πακέτα θα έχει τυχαία διεύθυνση IP αποστολέα</p>
</li>
<li>
<p>--fast: Τα πακέτα θα στέλνονται με γοργό ρυθμό</p>
</li>
</ul>
</div>
<divclass="paragraph">
<p><strong>Η επίθεση επομένως αποτελεί ένα SYN Flooding Attack με αποτέλεσμα πολλές συνδέσεις να μένουν μισάνοιχτες καθώς δεν ολοκληρώνεται το TCP Three Way Handshake.
Ο buffer συνδέσεων του Server γεμίζει και δεν δέχεται καινούργια αιτήματα. Επομένως επιτυγχάνεται Άρνηση Υπηρεσίας.</strong></p>
</div>
<divclass="paragraph">
<p>Εκτελούμε το script execute_playbook.sh και στο μενού επιλογών εισάγουμε τον αριθμό 3 με αποτέλεσμα το ansible να εκτελέσει το playbook start_ddos_attack.yml.</p>
</div>
<divclass="listingblock">
<divclass="title">start_ddos_attack.yml</div>
<divclass="content">
<pre>---
- name: Start DDoS
hosts: workers
become: true
become_user: root
tasks:
- name: Starting DDoS Attack
command: sh /home/docker/start_ddos.sh</pre>
</div>
</div>
<divclass="paragraph">
<p>Το playbook start_ddos_attack.yml εκτελεί ταυτόχρονα σε όλους τους workers το script start_ddos.sh με αποτέλεσμα την έναρξη DDoS Attack προς τον master(HTTP Server). Στη
συνέχεια πραγματοποιούμε ένα HTTP request με την βοήθεια του script curl.sh και παρατηρούμε ότι ο Server δεν ανταποκρίνεται.</p>
<p>Μεταβαίνουμε στον <strong>master</strong> κόμβο και εκτελούμε την εντολή <strong>sudo tcpdump port 8000</strong> ώστε να διαπιστώσουμε αν υφίσταται ασυνήθιστη δικτυακή κίνηση προς τον Server.</p>
</div>
<divclass="listingblock">
<divclass="content">
<pre>tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
<p>Παρατηρούμε ότι πραγματοποιούνται πολλές συνδέσεις σε μικρό χρονικό διάστημα. Κάθε σύνδεση έχει διαφορετική διεύθυνση αποστολέα και το SYN bit είναι ενεργοποιημένο.
Επίσης καμία από τις συνδέσεις δεν φαίνεται να ολοκληρώνει το TCP Three Way Handshake επομένως συμπαιρένουμε ότι πρόκεται για μία SYN Flooding DDoS Attack.</p>
</div>
<divclass="paragraph">
<p>Στην συνέχεια εκτελούμε την εντολή <strong>netstat -tn | grep 8000</strong></p>
<p>Για την εντιμετώπιση της επίθεσης συγκρίνουμε τα SYN πακέτα ανάμεσα σε ένα κανονικό HTTP request και σε ένα άιτημα που δημιουργήθηκε από το hping3.</p>
<p>Παρατηρούμε ότι τα πακέτα που στέλνονται μέσω του hping3 δεν θέτουν τιμή στο max segment size(mss) σε αντίθεση με τα κανονικά πακέτα που εκκινούν την σύνδεση. Επομένως μπορούμε να
φιλτράρουμε την κίνηση με βάση αυτό το κριτήριο.</p>
</div>
<divclass="listingblock">
<divclass="title">block_ddos.sh</div>
<divclass="content">
<pre>#!/bin/bash
# must run with sudo!!!
sudo iptables -I INPUT -p tcp --dport 8000 --tcp-flags SYN SYN -m tcpmss ! --mss 0:65535 -j DROP</pre>
</div>
</div>
<divclass="paragraph">
<p>Το script block_ddos.sh εισάγει στην αλυσίδα INPUT τον παραπάνω κανόνα σύμφωνα με τον οποίο Αν:</p>
</div>
<divclass="ulist">
<ul>
<li>
<p>Το πακέτο εισέρχεται στο σύστημα</p>
</li>
<li>
<p>Το πρωτόκολλο που χρησιμοποιείται στο επίπεδο μεταφοράς είναι το TCP</p>
</li>
<li>
<p>Η πόρτα προορισμού είναι η 8000</p>
</li>
<li>
<p>Το SYN bit είναι ενεργοποιημένο</p>
</li>
<li>
<p>Η τιμή του max segment size δεν ειναι απο 0 έως 65535(δηλαδή δεν έχει θέσει κάποιο mss)</p>
</li>
<li>
<p>Τότε το πακέτο απορρίπτεται</p>
</li>
</ul>
</div>
<divclass="paragraph">
<p>Εκτελούμε το script και στη συνέχεια πραγματοποιούμε ένα HTTP request με την βοήθεια του script curl.sh από τον worker_1. Παρατηρούμε ότι ο Server επιστρέφει το αρχείο index.html
επομένως συμπεραίνουμε πως η επίθεση αντιμετωπίστηκε με επιτυχία.</p>
</div>
<divclass="paragraph">
<p>Εκτελούμε την εντολή <strong>sudo iptables --list</strong> για την εμφάνιση του κανόνα που προστέθηκε μέσω του script</p>
</div>
<divclass="listingblock">
<divclass="content">
<pre>Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- anywhere anywhere tcp dpt:8000 flags:SYN/SYN tcpmss match !0:65535
<p>Για την πραγματοποίηση της επίθεσης εγκαθιστούμε το εργαλείο THC-Hydra στον master κόμβο με την εντολή <strong>sudo apt-get install hydra</strong>. Σε αυτό το σενάριο ο master θα αποτελέσει τον
<p>Το script ssh_brute_force.sh βρίσκει δυναμικά την IP διεύθυνση του worker_1 και εξαπολύει επίθεση προς αυτόν χρησιμοποιώντας το εργαλείο THC-Hydra με τις ακόλουθες επιλογές:</p>
</div>
<divclass="ulist">
<ul>
<li>
<p>-l: Θεωρεί δεδομένο πως το όνομα χρήστη είναι "docker"</p>
</li>
<li>
<p>-P: Δοκιμάζει όλους τους κωδικούς που υπάρχουν στο αρχείο password_list.txt</p>
</li>
</ul>
</div>
<divclass="listingblock">
<divclass="content">
<pre>Hydra v8.6 (c) 2017 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.
Hydra (http://www.thc.org/thc-hydra) starting at 2021-01-24 20:47:32
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 16 tasks per 1 server, overall 16 tasks, 200 login tries (l:1/p:200), ~13 tries per task
<p>Το script detect_ssh_brute_force.sh ελέγχει επαννελημένα το αποτέλεσμα της εντολής <strong>netstat -tn</strong> και όταν το πλήθος συνδέσεων στην πόρτα 22(δηλαδή στο SSH) είναι μεγαλύτερο του 20
iptables -I INPUT -p tcp --dport 22 -s $attacker -m state --state NEW -j DROP
sleep 90
iptables -D INPUT -p tcp --dport 22 -s $attacker -m state --state NEW -j DROP
fi
sleep 1
done</pre>
</div>
</div>
<divclass="paragraph">
<p>Το script block_ssh_brute_force.sh έχει σκοπό την αντιμετώπιση της επίθεσης SSH Brute Force. Ελέγχει επαννελημένα το αποτέλεσμα της εντολής <strong>netstat -tn</strong> και όταν το πλήθος συνδέσεων στην πόρτα 22(δηλαδή στο SSH) είναι μεγαλύτερο του 10 προσθέτει κατάλληλο κανόνα στο iptalbes ώστε να μην επιτρέπει στο επιτιθέμενο να πραγματοποιήσει καινούργιες συνδέσεις. Τέλος μετά από ένα διάστημα 90 δευτερολέπτων διαγράφει τον κανόνα από το iptables και συνεχίσει τον έλεγχο ώστε να εντοπίσει τυχόν νέες επιθέσεις.</p>
</div>
<divclass="paragraph">
<p>Εκτελούμε το script block_ssh_brute_force.sh και ξεκινάμε την επίθεση από τον master στον worker_1.</p>
</div>
<divclass="listingblock">
<divclass="content">
<pre>Hydra v8.6 (c) 2017 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.
Hydra (http://www.thc.org/thc-hydra) starting at 2021-01-25 00:55:05
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 16 tasks per 1 server, overall 16 tasks, 200 login tries (l:1/p:200), ~13 tries per task
[DATA] attacking ssh://172.27.0.3:22/
[STATUS] 139.00 tries/min, 139 tries in 00:01h, 94 to do in 00:01h, 16 active
1 of 1 target completed, 0 valid passwords found
[WARNING] Writing restore file because 1 final worker threads did not complete until end.
[ERROR] 1 target did not resolve or could not be connected
[ERROR] 16 targets did not complete
Hydra (http://www.thc.org/thc-hydra) finished at 2021-01-25 00:56:43</pre>
</div>
</div>
<divclass="paragraph">
<p>Παρατηρούμε ότι η επίθεση ήταν ανεπιτυχής.</p>
</div>
<divclass="listingblock">
<divclass="content">
<pre>Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- project_master_1.project_net anywhere tcp dpt:22 state NEW
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination</pre>
</div>
</div>
<divclass="paragraph">
<p>Επίσης στο iptables έχει προστεθεί κανόνας για τον αποκλεισμό του επιτιθέμενου.</p>
<p>Ένα από τα scripts που μεταφέρθηκαν στους workers μέσω του ansible ήταν το configure_ssh.sh. Το συγκεκριμένο script τροποποιεί κατάλληλα το config αρχείο του SSH ώστε να επιτρέπει
συνδέσεις μόνο με κλειδί και επανεκκινεί την υπηρεσία ώστε να λάβουν χώρα οι αλλαγές.</p>
</div>
<divclass="paragraph">
<p>Εκτελούμε το script execute_playbook.sh και στο μενού επιλογών εισάγουμε τον αριθμό 5 με αποτέλεσμα το ansible να εκτελέσει το playbook configure_ssh.yml.</p>
</div>
<divclass="listingblock">
<divclass="title">configure_ssh.yml</div>
<divclass="content">
<pre>---
- name: Configure ssh on workers
hosts: workers
become: true
become_user: root
tasks:
- name: Configuring ssh
command: sh /home/docker/configure_ssh.sh</pre>
</div>
</div>
<divclass="paragraph">
<p>Το playbook configure_ssh.yml αναλαμβάνει να εκτελέσει το script configure_ssh.sh σε όλους τους workers. Επομένως πραγματοποιείται ταυτόχρονη παραμετροποίηση των ssh-server στους workers.</p>
</div>
<divclass="paragraph">
<p>Εκτελούμε για μία τελευταία φορά την επίθεση.</p>
</div>
<divclass="listingblock">
<divclass="content">
<pre>Hydra v8.6 (c) 2017 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.
Hydra (http://www.thc.org/thc-hydra) starting at 2021-01-24 23:07:20
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 16 tasks per 1 server, overall 16 tasks, 200 login tries (l:1/p:200), ~13 tries per task
[DATA] attacking ssh://172.19.0.3:22/
[ERROR] target ssh://172.19.0.3:22/ does not support password authentication.</pre>
</div>
</div>
<divclass="paragraph">
<p>Παρατηρούμε πως το εργαλείο THC-Hydra εμφανίζει μήνυμα ότι η επίθεση δεν ήταν επιτυχής καθώς ο στόχος επιτρέπει σύνδεση μόνο με κλειδί.</p>
<h3id="_local_ssh_forwarding">4.1. Local SSH Forwarding</h3>
<divclass="paragraph">
<p>Σκοπός του Local SSH Forwarding είναι η προώθηση μίας υπηρεσίας στον client(worker_1) από τον Server(master) μέσω μιας πόρτας δημιουργώντας ένα tunnel μέχρι τον Server.</p>
<p>Αρχικά ο worker βρίσκει δυναμικά την IP διεύθυνση του server και πραγματοποιεί Local SSH Forwarding από την πόρτα 8000 του server στην τοπική του πόρτα 8080.</p>
</div>
<divclass="paragraph">
<p>Εκτελούμε το script στον worker_1 και πραγματοποιούμε HTTP request με το εργαλείο curl.</p>
<p>Σκοπός του Remote SSH Forwarding είναι η προώθηση μίας υπηρεσίας μέσω πόρτας από τον Server(master) στον client(worker_1) δημιουργώντας ένα tunnel μέχρι τον client.</p>
<p>Αρχικά ο master βρίσκει δυναμικά την IP διεύθυνση του worker_1 και πραγματοποιεί Remote SSH Forwarding από την πόρτα 8000 του server στην πόρτα 8080 του client.</p>
</div>
<divclass="paragraph">
<p>Εκτελούμε το script στον master και πραγματοποιούμε HTTP request από τον worker_1 με το εργαλείο curl.</p>
<p>Σκοπός του ζητούμενου είναι η δημιουργία Virtual Private Network καθώς και η σύνδεση των μελών του Σμήνους σε αυτό.</p>
</div>
<divclass="admonitionblock note">
<table>
<tr>
<tdclass="icon">
<iclass="fa icon-note"title="Note"></i>
</td>
<tdclass="content">
Τα πρώτα βήματα για την υλοποίηση του VPN εκτελούνται στο σύστημα που φιλοξενεί το docker και όχι μέσα στο Σμήνος.
</td>
</tr>
</table>
</div>
<divclass="paragraph">
<p>Αρχικά τροποποιούμε το αρχείο extra_lines κατάλληλα.</p>
</div>
<divclass="listingblock">
<divclass="content">
<pre>client
nobind
dev tun
comp-lzo
resolv-retry infinite
keepalive 15 60
remote-cert-tls server
remote 192.168.1.169 1194 udp <-- Αλλάζουμε την IP σε αυτήν του κανονικού μας συστήματος.
float</pre>
</div>
</div>
<divclass="paragraph">
<p>Στην συνέχεια εκτελούμε από το δικό μας σύστημα το script initiate-vpn.sh το οποίο έχει συνταχθεί σύμφωνα με τις <ahref="http://docs.swarmlab.io/SwarmLab-HowTos/labs/sec/ex-5_iptables.adoc.html">οδηγίες</a> του εργαστηρίου</p>
</div>
<divclass="listingblock">
<divclass="title">initiate-vpn.sh</div>
<divclass="content">
<pre>#!/bin/bash
IP=127.0.0.1 # Server IP
P=1194 # Server Port
OVPN_SERVER='10.80.0.0/16' # VPN Network
#vpn_data=/var/lib/swarmlab/openvpn/openvpn-services/ # Dir to save data ** this must exist **
vpn_data=$PWD/openvpn-services/
if [ ! -d $vpn_data ]; then
mkdir -p $vpn_data
fi
NAME=swarmlab-vpn-services # name of docker service
<p>Το script initiate-vpn.sh αναλαμβάνει την κατασκευή του VPN καθώς και την δημιουργία χρηστών για αυτό. Δημιουργούνται συνολικά πέντε χρήστες που αντιστοιχούν στα μέλη του σμήνους ενώ στην
συνέχεια πραγματοποιούνται οι κατάλληλες τροποποιήσεις πάνω στα .ovpn αρχεία του καθενός. Τέλος τα .ovpn αρχεία μεταφέρονται στον κοινόχρηστο φάκελο του Σμήνους.</p>
</div>
<divclass="paragraph">
<p><br></p>
</div>
<divclass="admonitionblock note">
<table>
<tr>
<tdclass="icon">
<iclass="fa icon-note"title="Note"></i>
</td>
<tdclass="content">
Τα επόμενα βήματα εκτελούνται από τα μέλη του Σμήνους
<p>Ο master κόμβος αναλαμβάνει τον διαμοιρασμό των .ovpn αρχείων στα μέλη του Σμήνους με τέτοιο τρόπο ώστε κάθε host να έχει στο δικό του home directory το μοναδικό .ovpn αρχείο που
του αντιστοιχεί. Αξίζει να σημειωθεί ότι τα αρχεία μαζί με την μεταφορά τους μετονομάζονται σε myvpn.ovpn ώστε να είναι δυνατή η σύνδεση όλων των host στο VPN με μία μόνο εκτέλεση μέσω ansible.</p>
</div>
<divclass="paragraph">
<p><br></p>
</div>
<divclass="paragraph">
<p>Εκτελούμε το script execute_playbook.sh και στο μενού επιλογών εισάγουμε τον αριθμό 6 με αποτέλεσμα το ansible να εκτελέσει το playbook install_openvpn.yml</p>
</div>
<divclass="listingblock">
<divclass="title">install_openvpn.yml</div>
<divclass="content">
<pre>---
- name: Install openvpn on all hosts
hosts: all_hosts
become: true
become_user: root
tasks:
- name: Installing openvpn
apt:
name: openvpn
state: present</pre>
</div>
</div>
<divclass="paragraph">
<p>Το playbook install_openvpn.yml αναλαμβάνει την εγκατάσταση του εργαλείου openvpn σε όλα τα μέλη του σμήνους(συμπεραλαμβανομένου του master).</p>
<p>Το script connect_to_vpn.sh συνδέει τον host που το εκτελεί στο VPN χρησιμοποιώντας το .ovpn file του.</p>
</div>
<divclass="paragraph">
<p><br></p>
</div>
<divclass="paragraph">
<p>Στη συνέχεια εκτελούμε το script execute_playbook.sh και στο μενού επιλογών εισάγουμε τον αριθμό 7 με αποτέλεσμα το ansible να εκτελέσει το playbook connect_to_vpn.yml.</p>
</div>
<divclass="listingblock">
<divclass="title">connect_to_vpn.yml</div>
<divclass="content">
<pre>- name: Connect to VPN
hosts: all_hosts
become: true
become_user: root
tasks:
- name: Transferring script connect_to_vpn.sh to every host
<p>Το playbook connect_to_vpn.yml αναλαμβάνει την μεταφορά του script connect_to_vpn.sh στο οποίο αναφερθήκαμε νωρίτερα σε όλους τους hosts του σμήνους και το εκτελεί. Αποτέλεσμα είναι
η σύνδεση όλων των μελών στο VPN με αυτοματοποιημένο τρόπο.</p>
</div>
<divclass="paragraph">
<p><br></p>
</div>
<divclass="paragraph">
<p>Εκτελούμε την εντολή <strong>ifconfig</strong> στον master</p>
</div>
<divclass="listingblock">
<divclass="content">
<pre>eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500