= Εργασία Εξαμήνου :toc: right :toc-title: Πίνακας περιεχομένων :toclevels: 4 :sectnums: :icons: font :tabs: + == Αρχιτεκτονική swarm image:images/swarmarchitecture.png[] + Υπάρχει αστερίσκος στο δεύτερο αριθμό της IP του docker network, διότι καθόλη την διάρκεια της άσκησης χρειάστηκε η ξαναδημιουργία σμήνους. Οπότε ο αστερίσκος μπορεί να αντικατασταθεί με 19 ή 29 καθόλη την διάρκεια της άσκησης. == Δημιουργία του swarm ---- ../install/usr/share/swarmlab.io/sec/swarmlab-sec create ---- image:images/swarmCreation.png[] + Δημιουργία 5 cluster ---- ../install/usr/share/swarmlab.io/sec/swarmlab-sec up size=5 ---- Σύνδεση ως master + ---- ../install/usr/share/swarmlab.io/sec/swarmlab-sec login ---- image:images/connectionToMaster.png[] + Εύρεση του δικτύου του swarm + ---- ifconfig ---- image:images/findSwarmNetworkIP.png[] + Άρα το δίκτυο μας είναι το 172.19.0.* + Εύρεση των IP των worker + ---- nmap -sP 172.19.0.* ---- image:images/findIPOfWorkers.png[] + άρα έχουμε τις εξής IP: |=== |master|172.19.0.2 |worker_1|172.19.0.3 |worker_2|172.19.0.4 |worker_3|172.19.0.5 |worker_4|172.19.0.6 |=== Σύνδεση στον worker_1 + ---- ../install/usr/share/swarmlab.io/sec/swarmlab-sec login ssh docker@172.19.0.3 bash ---- image:images/connectionToWorker1.png[] + == DOS Attack και iptable rules Εγκατάσταση του hping3 στον worker_1 ---- sudo apt update sudo apt install hping3 ---- Σύνδεση ως worker_2 + ---- ../install/usr/share/swarmlab.io/sec/swarmlab-sec login ssh docker@172.19.0.4 bash ---- image:images/connectionToWorker2.png[] + Εμφάνιση πακέτων του worker_1 που παραλαμβάνονται από τον worker_2 + ---- sudo tcpdump src 172.19.0.3 ---- image:images/awaitingPacketsFromWorker2.png[] + Ο worker_1 κάνει DOS attack στον worker_2 + ---- sudo hping3 172.19.0.4 ---- image:images/succesfulDOSAttack.png[] + Εμφανίζονται στον worker_2 τα πακέτα από το DOS attack + image:images/displayOfAttackPackets.png[] + Δημιουργία κανόνα στον worker_2 για να αγνοεί πακέτα του worker_1 και ξαναεμφάνιση των πακέτων που θα προέλθουν από τον worker_1 + ---- sudo iptables -I INPUT -s 172.19.0.3 -j DROP sudo tcpdump srd 172.19.0.3 ---- image:images/ruleCreationAndDisplayOfAttackPackets.png[] + Ο worker_1 ξανακάνει DOS attack στον worker_2 + ---- sudo hping3 172.19.0.4 ---- image:images/unsuccesfulDOSAttack.png[] + Παρατηρούμε 100% packet loss, άρα το DOS attack απέτυχε + Εμφάνιση του ποσού των πακέτων που έγιναν DROP από τον κανόνα που θέσαμε + ---- sudo iptables -nvL ---- image:images/displayOfAmountOfAttackPacketsDroped.png[] + 19 πακέτα έγιναν DROP == Brute Force Attack, Fail2Ban, Passwordless(withKey) ssh connection Συνδεόμαστε στον worker_1 και εγκαθιστούμε το patator + ---- sudo apt install patator ---- Δημιουργούμε το αρχείο passwords.txt + ---- vi passwords.txt ---- |=== |dfsgds + fgd + fg + df + gd + fg + dfg + dfgdfg + df + gd + fg + df + g + asdfgfd + gs + dfg + sg + sd + gsdfdasf + a + docker + 14114144 + |=== Ο worker_1 κάνει brute force attack στον worker_1 ---- patator ssh_login host=172.29.0.4 user=docker password=FILE0 0=passwords.txt -x ignore:mesg='Authentication failed.' ---- image:images/succesfulBruteForceAttack.png[] + Κατάφερε να βρει τον κωδικό του worker_2(172.29.0.4) Εγκαθιστούμε στον worker_2 το fail2ban ---- sudo apt install fail2ban ---- Αντιγράφουμε τα περιεχόμενα του jail.conf στο jail.local + ---- sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local ---- image:images/creationOfJailLocal.png[] + Βάζουμε τις παρακάτω γραμμές μέσα στο jail.local αντικαθιστώντας τα παλιά περιεχόμενα του [sshd] |=== |[ssh] + enabled = true + filter = sshd + logpath = /var/log/auth.log + maxretry = 5 + backend = %(sshd_backend)s + [sshd] + enabled = true + filter= sshd + logpath = /var/log/auth.log + maxretry=5 + backend = %(sshd_backend)s |=== Εγκαθιστούμε το rsyslog ---- sudo apt-get -y install rsyslog ---- Τρέχουμε το rsyslogd για να εμφανιστεί το auth.log στο οποίο θα αναγράφεται οι απόπειρες σύνδεσης στον worker_2 ---- rsyslogd ---- Στη συνέχεια δοκιμάζουμε πάλι το brute force attack και παίρνουμε το παρακάτω αποτέλεσμα ---- patator ssh_login host=172.29.0.4 user=docker password=FILE0 0=passwords.txt ---- image:images/unsuccesfulBruteForceAttack.png[] + Παρατηρούμε ότι όταν έφτασε στην δοκιμή docker έβγαλε error Connection refused, το οποίο σημαίνει ότι το fail2ban έκανε ban τον worker_1 επιτυχώς. + Στη συνέχεια, μπορούμε να δούμε και τον κανόνα που πρόσθεσε το fail2ban στα iptables + ---- sudo iptables -L ---- image:images/ruleCreatedByFail2Ban.png[] + Στην συνέχεια διαγράψαμε την δουλειά του fail2ban για να προχωρήσουμε στο επόμενο βήμα. ---- sudo fail2ban-client unban --all sudo iptables -F sudo fail2ban-client stop ---- Ανοίγουμε το sshd_config και αλλάζουμε τις εξής γραμμές αφαιρώντας και την δίεση + ==== LogLevel VERBOSE + PermitRootLogin prohibit-password + PasswordAutherntication no ==== Επανεκκίνηση του ssh ---- sudo service restart ---- Προσπαθούμε να συνδεθούμε στον worker_2 με τον worker_1. + image:images/unsuccesfulSSHDueToNoPasswordRule.png[] + Ξανά σχολιάζουμε την γραμμή PasswordAuthentication no για να μπορέσουμε να στείλουμε το κλειδί που θα φτιάξει ο worker_1 στον worker_2. Επανεκκίνηση του ssh ---- sudo service ssh restart ---- Δημιουργούμε το κλειδί με passphrase 12345 + ---- ssh-keygen ---- image:images/keyCreation.png[] + Το στέλνουμε στον worker_2 ---- ssh-copy-id -i ~/.ssh/id_rsa.pub docker@172.29.0.4 ---- image:images/sendKeyToWorker2.png[] + Ξανά βγάζουμε από σχόλιο την γραμμή PasswordAuthentication no + Επανεκκίνηση του ssh ---- sudo service ssh restart ---- Σύνδεση του worker_1 με τον worker_2 με το passphrase 12345 + image:images/connectionWithKey.png[] + == Local και Remote SSH Forwarding Εγκαθιστούμε τον apache στο μηχάνημα μας ---- sudo apt install apache2 ---- Τρέχουμε τον server ---- apacherctl start ---- Αλλάζουμε το περιεχόμενο που θα έχει το site, αλλάζοντας το περιεχόμενο του αρχείου /var/www/html/index.html σε Hello World + Εγκαθιστούμε το openssh-server για να μπορεί να συνδεθεί ο worker στο μηχάνημα μας ---- sudo apt install openssh-server ---- Βρίσκουμε την IP του μηχανήματος μας ---- ifconfig ---- image:images/myIP.png[] + Στη συνέχεια κάνουμε local ssh forwarding από το worker_1 στο μηχάνημα μας + ---- ssh -nNT -L 8000:localhost:80 geo@192.168.80.128 ---- image:images/localPortForwarding.png[] + Στη συνέχεια ανοίγουμε άλλο ένα terminal για τον worker_1 και βλέπουμε το αποτέλεσμα. + ---- curl localhost:8000 ---- image:images/accessToWebServer.png[] + Αφού κλείσουμε το local ssh forwarding ανοίγουμε remote ssh forwarding από το μηχάνημα μας στον worker_1 + ---- ssh -nNT -R 8000:localhost:80 docker@172.29.0.4 ---- image:images/remotePortForwarding.png[] + Βλέπουμε ότι από τον worker_1 μπορούμε να δούμε τον server του μηχανήματος μας ---- curl localhost:8000 ---- image:images/accessToWebServer.png[] + == VPN Δημιουργούμε το παρακάτω αρχείο στο μηχάνημα μας ~/Downloads/swarmlab-sec-master/swarmlab-sec/vpn/create-vpn.sh + |=== |#!/bin/bash + IP=127.0.0.1 # Server + 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 + DOCKERnetwork=swarmlab-vpn-services-network # docker network + docker=registry.vlabs.uniwa.gr:5080/myownvpn # docker image + docker stop $NAME #stop container + sleep 1 + docker container rm $NAME #rm container + # rm config files + rm -f $vpn_data/openvpn.conf.\*.bak + rm -f $vpn_data/openvpn.conf + rm -f $vpn_data/ovpn_env.sh.*.bak + rm -f $vpn_data/ovpn_env.sh + # create network + sleep 1 + docker network create --attachable=true --driver=bridge --subnet=172.50.0.0/16 --gateway=172.50.0.1 $DOCKERnetwork + #run container see ovpn_genconfig + docker run --net=none -it -v $vpn_data:/etc/openvpn -p 1194:1194 --rm $docker ovpn_genconfig -u udp://$IP:1194 \ -N -d -c -p "route 172.50.20.0 255.255.255.0" -e "topology subnet" -s $OVPN_SERVER + # create pki see ovpn_initpki + docker run --net=none -v $vpn_data:/etc/openvpn --rm -it $docker ovpn_initpki + # see ovpn_copy_server_files + #docker run --net=none -v $vpn_data:/etc/openvpn --rm $docker ovpn_copy_server_files + #create vpn see --cap-add=NET_ADMIN + sleep 1 + docker run --detach --name $NAME -v $vpn_data:/etc/openvpn --net=$DOCKERnetwork --ip=172.50.0.2 -p $P:1194/udp --cap-add=NET_ADMIN $docker + sudo sysctl -w net.ipv4.ip_forward=1 + #show created + docker ps + |=== Βάζουμε δικαιώματα εκτέλεσης ---- chmod 700 create-vpn.sh ---- Εκτελούμε το script create-vpn.sh ---- ./create-vpn.sh ---- Μας ζητάει pass phrase και του δίνουμε το 54321 + Δημιουργούμε το παρακάτω αρχείο στο μηχάνημα μας + ~/Downloads/swarmlab-sec-master/swarmlab-sec/vpn/create-user.sh + |=== |USERNAME=test1 + vpn_data=$PWD/openvpn-services/ docker=registry.vlabs.uniwa.gr:5080/myownvpn + docker run -v $vpn_data:/etc/openvpn --rm -it $docker easyrsa build-client-full $USERNAME nopass + docker run -v $vpn_data:/etc/openvpn --log-driver=none --rm $docker ovpn_getclient $USERNAME > $USERNAME.vpn + |=== Βάζουμε δικαιώματα εκτέλεσης ---- chmod 700 create-user.sh ---- Εκτελούμε το script create-vpn.sh ---- ./create-user.sh ---- Μας ζητάει pass phrase και του δίνουμε το 54321 + Αντικαθιστούμε τις παρακάτω γραμμές στο test1.vpn |=== |Γραμμές προς αντικατάσταση|Νέες γραμμές |client + nobind + dev tun + remote-cert-tls server + remote 127.0.0.1 1194 udp |client + nobind + dev tun + comp-lzo + resolv-retry infinite + keepalive 15 60 + remote-cert-tls server + remote 192.168.80.128 1194 udp + float + |=== Αντιγράφουμε το test1.ovpn στον φάκελο project που έχει access το swarm ---- cp test1.ovpn ../myproject/project/test1.vpn ---- Εγκαθιστούμε στον worker_1 το openvpn ---- sudo apt update sudo apt install openvpn ---- Σύνδεση του worker_1 στο vpn + ---- sudo openvpn --config /project/test1.vpn ---- image:images/connectionToVPN.png[] + Πήραμε την IP 10.80.0.2 + ---- ifconfig ---- image:images/workerVPNIP.png[] + Αλλάζουμε την πρώτη γραμμή του create-user.sh έτσι ώστε να δημιουργήσει ένα ακόμη αρχείο + |=== |USERNAME=test2 |=== Και κάνουμε την παραπάνω διαδικασία για το master και το test2.vpn Μετά κάνουμε ping μεταξύ τους και βλέπουμε αντίδραση + ---- sudo tcpdump -i tun0 ---- image:images/pingBetweenMasterWorkerThroughtVPN.png[] +