diff --git a/README.md b/README.md index adaebf0..2d41349 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,393 @@ # Voskopoulos_Georgios_cs170003 + = Εργασία Εξαμήνου + :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[] + \ No newline at end of file