georgeVos
4 years ago
1 changed files with 1 additions and 393 deletions
@ -1,393 +1 @@ |
|||||
# Voskopoulos_Georgios_cs170003 |
# 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[] + |
|
Loading…
Reference in new issue