1. Shorewall
Το Shorewall είναι ένα εργαλείο τείχους προστασίας ανοιχτού κώδικα για το Linux που βασίζεται στο σύστημα Netfilter (iptables / ipchains) ενσωματωμένο στον πυρήνα του Linux, διευκολύνοντας τη διαχείριση πιο περίπλοκων σχημάτων διαμόρφωσης παρέχοντας ένα υψηλότερο επίπεδο αφαίρεσης για την περιγραφή κανόνων χρησιμοποιώντας αρχεία κειμένου.
2. Docker
Το Docker είναι ένα πρόγραμμα εικονικοποίησης επιπέδου λειτουργικού συστήματος το οποίο αναπτύχθηκε από την Docker Inc. Docker είναι ένα λογισμικό εικονικοποίησης σε επίπεδο OS και υποστηρίζει λειτουργικό σύστημα Linux και Windows. Για να χρησιμοποιήσετε το Docker σε Linux, πρέπει να χρησιμοποιηθεί το Ubuntu. Πρέπει να διασφαλιστεί η σωστή έκδοση του πυρήνα του Linux πριν την εγκατάσταση του Docker σε λειτουργικό σύστημα Linux. Το Docker διαθέτει επίσης ένα διανομέα Docker Registry ο οποίος διαθέτει μια λίστα υπηρεσιών πριν το χρησιμοποιήσετε.
3. SSH TUNNELING
Μια σήραγγα Secure Shell (SSH) αποτελείται από μια κρυπτογραφημένη σήραγγα που δημιουργείται μέσω μιας σύνδεσης πρωτοκόλλου SSH. Οι χρήστες μπορούν να ρυθμίσουν σήραγγες SSH για να μεταφέρουν μη κρυπτογραφημένη κίνηση μέσω δικτύου μέσω κρυπτογραφημένου καναλιού. Μπορεί να χρησιμοποιηθεί και για την υλοποίηση VPN δικτύων και για πρόβαση σε υπηρεσίες intranet (εσωτερικών δικτύων) σε τείχη προστασίας. Παρέχει ένα τρόπο για να εξασφαλίσει την κυκλοφορία δεδομένων οποιασδήποτε συγκεκριμένης εφαρμογής,χρησιμοποιώντας τη σήραγγα οποιασδήποτε θύρας TCP/IP μέσω SSH.
4. VPN
Το εικονικό ιδιωτικό δίκτυο (VPN) είναι ένας τρόπος με τον οποίο δύο ή περισσότερα εταιρικά δίκτυα μπορούν να συνδεθούν μέσω δημόσιου δικτύου για να σχηματίσουν ένα φαινομενικά ιδιωτικό δίκτυο. Σήμερα, ο ορισμός του VPN έχει επεκταθεί ώστε να περιλαμβάνει μεμονωμένους απομακρυσμένους σταθμούς εργασίας συνδεδεμένους σε εταιρικό δίκτυο. Ένα VPN συνήθως απαιτεί από τους απομακρυσμένους χρήστες του δικτύου πιστοποίηση και συχνά ασφαλίζει τα δεδομένα με τεχνολογίες κρυπτογράφησης για να εμποδιστεί η υποκλοπή και η διάδοση ιδιωτικών πληροφοριών σε χρήστες που δεν είναι συνδεδεμένοι (μη εξουσιοδοτημένοι χρήστες).
4.1. Δημιουργία δικτύων στον docker HOST
"create network frist"
Για τη δημιουργία δικτύων, μέσα στα Containers του Docker, εκτελούμε τις εξής εντολές στο τερματικό :
docker network create --driver=bridge --subnet=IP_subnet/Prefix Network_name
4.2. Δημιουργία δικτύων in docker container
"connect network created to container"
Με την παρακάτω εντολή καθορίζουμε σε ποια δίκτυα θα συνδεθούν τα container που θα δημιουργηθούν.
Εκτελούμε την εντολή docker container ps για να βρούμε το όνομα του container που θέλουμε να συνδεθούμε. Έπειτα γράφουμε:
docker network connect Network_name Container_name
4.2.1. Για σύνδεση στο ίντερνετ
Ωστόσο για την σύνδεση των container με το ίντερνετ, θα πρέπει να ρυθμίσουμε ως Gateway την κατάλληλη ip. Με την παρακάτω εντολή:
ip route add default via Host_Network_ip dev interface
4.3. ΖΗΤΗΜΑΤΑ
4.3.1. Allow Internet connection
4.3.2. Allow only connection from Network A → B, B → A port 80
Eπικοινωνία Δικτύων Α → Β, Β → Α
Γι’ αυτή την επικοινωνία των δικτύων, θα χρειαστεί να ρυθμίσουμε το Shorewall.
Με την βοήθεια, της εντολής nano, ανοίγουμε τα αρχεία: interfaces, zones, policy, masq, rules
-
nano /etc/shorewall/interfaces
Προσθέτουμε το δίκτυο και την διεπαφή του.
ZONE | INTERFACE | BROADCAST | OPTIONS |
---|---|---|---|
net |
eth0 |
detect |
tcpflags,nosmurfs |
Network_name_for_A |
ethA |
detect |
tcpflags,nosmurfs |
Network_name_for_B |
ethB |
detect |
tcpflags,nosmurfs |
-
nano /etc/shorewall/zones
Προσθέτουμε το δίκτυο και τον τύπο του.
ZONE | TYPE | OPTIONS | IN Options | OUT Options |
---|---|---|---|---|
fw |
firewall |
|||
net |
ipv4 |
|||
Network_name_A |
ipv4 |
|||
Network_name_B |
ipv4 |
-
nano /etc/shorewall/policy
Προσθέτουμε τις επιτρεπόμενες κινήσεις από μέσα προς τα έξω και ανάποδα.
SOURCE | DEST | POLICY | LOG LEVEL | LIMIT:BURST |
---|---|---|---|---|
net |
fw |
ACCEPT |
||
fw |
net |
ACCEPT |
||
Network_name_A |
net |
ACCEPT |
||
fw |
Network_name_A |
ACCEPT |
||
net |
Network_name_A |
ACCEPT |
||
Network_name_A |
fw |
ACCEPT |
||
Network_name_A |
Network_name_B |
ACCEPT |
||
Network_name_B |
Network_name_A |
ACCEPT |
||
net |
all |
DROP |
||
all |
all |
REJECT |
info |
-
nano /etc/shorewall/masq
Γράφουμε τα ονόματα των διεπαφών.
INTERFACE | SOURCE |
---|---|
eth0 |
ethA |
eth0 |
ethB |
-
nano /etc/shorewall/rules
Προσθέτουμε την πόρτα και το πρωτόκολλο που θα χρησιμοποιήσει η επιτρεπόμενη κίνηση.
(Προσθέτουμε τις ανάλογες γραμμές έτσι ώστε τα δίκτυα, να έχουν επικοινωνία στην πόρτα 80.)
ACTION | SOURCE | DEST | PROTO | DEST PORT |
---|---|---|---|---|
ACCEPT |
Network_name_A |
Network_name_B |
tcp |
80 |
ACCEPT |
Network_name_B |
Network_name_A |
tcp |
80 |
Κάνουμε restart το shorewall και έπειτα κάνουμε ping στον worker και βλέπουμε ότι τρέχει.
4.3.3. Open SSH Tunnel from NETWORK-A(port 80) → MASTER(port 8080) and connect from HOST → MASTER port 9000
Για να υλοποιήσουμε την παραπάνω σηράγγωση, πρέπει πρώτα να εγκαθιδρύσουμε μία σηράγγωση SSH (local port forwarding) μεταξύ:
-
του υπολογιστή μας (HOST) και του master
-
του master και του worker.
ssh -t -L 9000:localhost:8080 <user>@<Master_IP_Address> ssh -L 8080:localhost:80 <user>@<Worker_IP_Address>
4.3.4. Create VPN
Δημιουργούμε ένα VPN από την πλευρά του worker και φτιάχνουμε ένα χρήστη με τον οποίο θα συνδεθεί ο host στο VPN.
-
create network
docker network create --attachable=true --driver=bridge --subnet=Network_IP_Address/CIDR --gateway=Gateway_IP_Address docker_Network_name
-
run container
Δημιουργούμε ένα φάκελο τον οποίο θα χρησιμοποιήσουμε για το VPN.
docker run --net=none -it -v Destination_file:/etc/openvpn --rm ovpn_name ovpn_genconfig -u udp://IP_Address_HOST:Port \-N -d -c -p "route container <Network_IP><Network_mask>" -e "topology subnet" -s Network_VPN_IP_Address/CIDR (οι διευθύνσεις που παρέχονται από το VPN)
-
create pki
Δημιουργία κλειδιού για σύνδεση χρήστη.
docker run --net=none -v Destination_file:/etc/openvpn --rm -it ovpn_name ovpn_initpki
-
create vpn
Δημιουργία εικονικού ιδιωτικού δικτύου.
docker run --detach --name name_VPNSERVER -v Destination_file:/etc/openvpn --net=docker_Network_name --ip=IP_container_VPNSERVER -p PORT_VPN_(physical_port)_:*<virtual_port>*/udp --cap-add=NET_ADMIN ovpn_name
-
create user
Δημιουργία χρήστη.
docker run -v Destination_file:/etc/openvpn --rm -it ovpn_name easyrsa build-client-full client_name_VPN nopass
-
Αποστολή ρυθμίσεων χρήστη σε αρχείο.
docker run -v Destination_file:/etc/openvpn --log-driver=none --rm ovpn_name ovpn getclient <client_name_VPN><path/filename.ovpn>
NOTE: Για την αποστολή του αρχείου από τον host στον χρήστη VPN, για να μπορεί να συνδεθεί, ο χρήστης θα πρέπει να εκτελέσει την εντολή openvpn –config _filename.ovpn .