From 1ce95d6d7c54ebb8d6912d0c68b22e45e1f3f103 Mon Sep 17 00:00:00 2001 From: georgeVos Date: Sun, 27 Dec 2020 16:01:21 +0000 Subject: [PATCH] Update 'README.md' --- README.md | 394 +----------------------------------------------------- 1 file changed, 1 insertion(+), 393 deletions(-) diff --git a/README.md b/README.md index 2d41349..ac67d92 100644 --- a/README.md +++ b/README.md @@ -1,393 +1 @@ -# 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 +# Voskopoulos_Georgios_cs170003 \ No newline at end of file