Το Docker είναι μία πλατφόρμα λογισμικού ανοιχτού κώδικα με την οποία μπορούμε να κάνουμε virtualization σε επίπεδο λειτουργικού συστήματος. Δίνεται δηλαδή η δυνατότητα να εγκατασταθεί μόνο η εφαρμογή/υπηρεσία που θέλουμε, σε ένα απομονωμένο περιβάλλον από κανονικό σύστημα. Αυτό έχει ως συνέπεια την εξοικονόμηση CPU, GPU και RAM του υπολογιστή. Ακόμη, μπορεί να
χρησιμοποιηθεί για να δοκιμαστούν άγνωστες εφαρμογές, χωρίς να κινδυνέψει το υπόλοιπο σύστημα.
Στα παραπάνω screenshots φαίνεται ο διαφορετικός τύπος μηνυμάτων.
====
=== IP tables
Ένας τρόπος για να αποφευχθούν τα attacks είναι με χρήση των iptables. Είναι κάποιοι κανόνες που μπορούμε να δηλώσουμε ώστε να απαγορεύσουμε/επιτρέψουμε την διέλευση πακέτων. Παρακάτω χρησιμοποιήθηκε κανόνας που κόβει την κίνηση από μία συγκεκριμένη IP.
====
Τα παρακάτω χρειάζονται sudo: +
----
iptables -I INPUT -s <IP address we want to block> -j DROP
----
Για να δούμε τους κανόνες: +
----
iptables -L
----
image:images/ip_tables.png[] +
Με την iptables -nvL μπορούμε να δούμε και στατιστικά, όπως πόσα πακέτα έχουν απορριφθεί από τον κάθε κανόνα.
Βγάζουμε από comment το PasswordAuthentication και κάνουμε restart το ssh +
----
sudo service ssh restart
----
Αν πάμε να συνδεθούμε, πλέον θα χρειάζεται το κλειδί που δώσαμε στο ssh-keygen +
====
== SSH Forwarding
=== Εγκατάσταση υπηρεσίας (apache)
====
----
sudo apt-get update
sudo apt install apache2
----
TIP: Αν έχουμε ήδη κάποια άλλη υπηρεσία, μπορούμε να χρησιμοποιήσουμε αυτή.
====
Για να τρέξουμε την υπηρεσία:
====
----
sudo apachectl start
sudo netstat -antlupe
----
image:images/apache_is_running.png[] +
Η υπηρεσία μας τρέχει! +
====
=== Local port forwarding
Η πρώτη συράγγωση είναι μεταξύ ενός container στον υπολογιστή μας. Για να επιτευχθεί αυτό χρειάζεται ο υπολογιστής μας να έχει και την server side υπηρεσία του ssh. Η port μετά το localhost θα πρέπει να είναι εκείνη που έχει την υπηρεσία που θέλουμε. Αλλάζουμε username και IP ανάλογα. +
====
Σε ένα οποιοδήποτε container γράφουμε: +
----
ssh -nNT -L 8081:localhost:80 iro@192.168.64.128
----
image:images/local_port_forwarding.png[] +
image:images/apache_page.png[] +
Εάν κάνουμε curl localhost:8081 βλέπουμε την σελίδα του apache +
====
=== Remote port forwarding
====
Στον υπολογιστή μας γράφουμε: +
----
ssh -nNT -R 8082:localhost:80 docker@172.21.0.6
----
image:images/remote_ssh.png[] +
image:images/remote_ssh_apache.png[] +
Εάν κάνουμε curl localhost:8082 βλέπουμε την σελίδα του apache +
====
== VPN
Δημιουργούμε ένα νέο κατάλογο μέσα στο swarmlab-sec με όνομα π.χ. vpn +
=== Δημιουργία αρχείου (create-vpn.sh)
* copy-paste
====
[source,bash]
----
#!/bin/bash
IP=127.0.0.1 # Server IP # <1>
P=1194 # Server Port # <2>
OVPN_SERVER='10.80.0.0/16' # VPN Network # <3>
#vpn_data=/var/lib/swarmlab/openvpn/openvpn-services/ # Dir to save data ** this must exist **
vpn_data=$PWD/openvpn-services/ # <4>
if [ ! -d $vpn_data ]; then
mkdir -p $vpn_data
fi
NAME=swarmlab-vpn-services # name of docker service # <5>
<1> localhost inside of a container will resolve to the network stack of this container
<2> Port
<3> Specify Addresses and Netmasks for VPN Clients
<4> Directory to mount data
<5> Name of docker services
<6> Create config
<7> keys
<8> Run docker vpn service
====
Τρέχουμε το αρχείο. (προσοχή στα δικαιώματα). Θα ζητηθεί ένα passphrase, μπορούμε να εισάγουμε ότι θέλουμε. Όταν η διαδικασία ολοκληρωθεί, θα πρέπει στα NAMES να δούμε το όνομα swarmlab-vpn-services (ή το αντίστοιχο που έχουμε επιλέξει εμείς). +
image:images/vpn_success.png[] +
Μπορούμε να το επιβεβαιώσουμε και με netstat +
image:images/vpn_success_2.png[] +
=== Δημιουργία χρήστη
Για να μπορέσει να συνδεθεί ένας χρήστης, χρειάζεται ένα config αρχείο.
Θα πρέπει να επιστρέψει την παρακάτω οθόνη (αφού εισάγουμε τον κωδικό) +
image:images/user_config_create_1.png[] +
====
Ανοίγουμε το αρχείο του χρήστη και κάνουμε copy-paste αντικαθιστώντας την host machine IP με την δική μας, δηλαδή το μηχανάκι που τρέχει το docker. Το 1194 είναι η πόρτα που έχουμε δώσει στο create-vpn.sh
====
----
client
nobind
dev tun
comp-lzo
resolv-retry infinite
keepalive 15 60
remote-cert-tls server
remote <HOST MACHINE IP> 1194 udp
float
----
Αντιγράφουμε το αρχείο στον φάκελο που έχουμε το project
----
cp sec* ../test/project/
----
image:images/sec_on_project_folder.png[] +
====
=== Εγκατάσταση openvpn
Για να μπορέσουμε να συνδεθούμε στο vpn, χρειαζόμαστε το openvpn. Το εγκαθιστούμε τόσο στα containers όσο και στο docker (τον master)
====
----
apt update
apt install openvpn
----
====
=== Λειτουργία
Εκτελούμε την παρακάτω εντολή σε κάποιο container:
====
----
openvpn --config ./sec1.ovpn
----
image:images/init_sequence_complete.png[] +
Εδώ βλέπουμε ότι το container πήρε την IP 10.80.0.2, η οποία είναι εντός του VPN nertwork που ορίστηκε στο create-vpn.sh αρχείο (10.80.0.0/16). +