1. Shorewall

Το Shorewall είναι ένα εργαλείο τείχους προστασίας ανοιχτού κώδικα για το Linux που βασίζεται στο σύστημα Netfilter (iptables / ipchains) ενσωματωμένο στον πυρήνα του Linux, διευκολύνοντας τη διαχείριση πιο περίπλοκων σχημάτων διαμόρφωσης παρέχοντας ένα υψηλότερο επίπεδο αφαίρεσης για την περιγραφή κανόνων χρησιμοποιώντας αρχεία κειμένου.

1

2. Docker

Το Docker είναι ένα πρόγραμμα εικονικοποίησης επιπέδου λειτουργικού συστήματος το οποίο αναπτύχθηκε από την Docker Inc. Docker είναι ένα λογισμικό εικονικοποίησης σε επίπεδο OS και υποστηρίζει λειτουργικό σύστημα Linux και Windows. Για να χρησιμοποιήσετε το Docker σε Linux, πρέπει να χρησιμοποιηθεί το Ubuntu. Πρέπει να διασφαλιστεί η σωστή έκδοση του πυρήνα του Linux πριν την εγκατάσταση του Docker σε λειτουργικό σύστημα Linux. Το Docker διαθέτει επίσης ένα διανομέα Docker Registry ο οποίος διαθέτει μια λίστα υπηρεσιών πριν το χρησιμοποιήσετε.

2

3. SSH TUNNELING

Μια σήραγγα Secure Shell (SSH) αποτελείται από μια κρυπτογραφημένη σήραγγα που δημιουργείται μέσω μιας σύνδεσης πρωτοκόλλου SSH. Οι χρήστες μπορούν να ρυθμίσουν σήραγγες SSH για να μεταφέρουν μη κρυπτογραφημένη κίνηση μέσω δικτύου μέσω κρυπτογραφημένου καναλιού. Μπορεί να χρησιμοποιηθεί και για την υλοποίηση VPN δικτύων και για πρόβαση σε υπηρεσίες intranet (εσωτερικών δικτύων) σε τείχη προστασίας. Παρέχει ένα τρόπο για να εξασφαλίσει την κυκλοφορία δεδομένων οποιασδήποτε συγκεκριμένης εφαρμογής,χρησιμοποιώντας τη σήραγγα οποιασδήποτε θύρας TCP/IP μέσω SSH.

3

4. VPN

Το εικονικό ιδιωτικό δίκτυο (VPN) είναι ένας τρόπος με τον οποίο δύο ή περισσότερα εταιρικά δίκτυα μπορούν να συνδεθούν μέσω δημόσιου δικτύου για να σχηματίσουν ένα φαινομενικά ιδιωτικό δίκτυο. Σήμερα, ο ορισμός του VPN έχει επεκταθεί ώστε να περιλαμβάνει μεμονωμένους απομακρυσμένους σταθμούς εργασίας συνδεδεμένους σε εταιρικό δίκτυο. Ένα VPN συνήθως απαιτεί από τους απομακρυσμένους χρήστες του δικτύου πιστοποίηση και συχνά ασφαλίζει τα δεδομένα με τεχνολογίες κρυπτογράφησης για να εμποδιστεί η υποκλοπή και η διάδοση ιδιωτικών πληροφοριών σε χρήστες που δεν είναι συνδεδεμένοι (μη εξουσιοδοτημένοι χρήστες).

4

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

5
6

4.2.1. Για σύνδεση στο ίντερνετ

Ωστόσο για την σύνδεση των container με το ίντερνετ, θα πρέπει να ρυθμίσουμε ως Gateway την κατάλληλη ip. Με την παρακάτω εντολή:

ip route add default via Host_Network_ip dev interface

7

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>

8

4.3.4. Create VPN

9

Δημιουργούμε ένα 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 .