Προετοιμασίες
Ρύθμιση λειτουργικού συστήματος
Δίκτυο
Πρόσβαση SSH
Επιπρόσθετες ρυθμίσεις
Port Forwarding
Χωριστά δοχεία
Τα LXC containers (Linux containers) είναι μια λειτουργία λειτουργικού συστήματος στο Linux που μπορεί να χρησιμοποιηθεί για την εκτέλεση πολλαπλών απομονωμένων συστημάτων Linux σε έναν μόνο κεντρικό υπολογιστή.
Αυτές οι οδηγίες θα σας καθοδηγήσουν στα βασικά βήματα της διαμόρφωσης διακομιστή για τη φιλοξενία απομονωμένων κοντέινερ Linux. Θα ρυθμίσουμε τις παρακάτω δυνατότητες:
- Δοχεία LXC με Ubuntu 14.
- Ρυθμίσεις δικτύου Linux και προώθηση θυρών για κοντέινερ.
- Προώθηση SSH για διαχείριση κοντέινερ τόσο απλή όσο
ssh [email protected]
καιssh [email protected]
- Διαμόρφωση διακομιστή μεσολάβησης Nginx για πρόσβαση σε ιστότοπους εντός κοντέινερ (κατά όνομα κεντρικού υπολογιστή).
- Πρόσθετες βελτιώσεις ασφάλειας για σωστή διαχείριση διακομιστή.
Αυτός ο οδηγός προϋποθέτει ότι:
- Έχετε λογαριασμό στο Vultr.com .
- Ξέρετε πώς να διαμορφώσετε μια εικονική μηχανή με προσαρμοσμένο ISO.
- Γνωρίζετε πώς να χρησιμοποιείτε τα κλειδιά SSH και έχετε ήδη δημιουργήσει δημόσια και ιδιωτικά κλειδιά.
Στο τέλος του σεμιναρίου θα λάβουμε δύο εικονικά κοντέινερ που θα έχουν πρόσβαση στο διαδίκτυο, αλλά δεν μπορούν να κάνουν ping μεταξύ τους. Θα διαμορφώσουμε επίσης την προώθηση θύρας από example.com
σε κοντέινερ. Θα αναπτύξουμε ασφαλή πίνακα διαμόρφωσης και διαχείρισης με τη βοήθεια εργαλείων από το πακέτο Proxmox.
Προετοιμασίες
Θα χρησιμοποιήσουμε το Proxmox μόνο για τη διαχείριση κοντέινερ LXC. Γενικά, υποστηρίζει επίσης KVM, αλλά η ένθετη εικονικοποίηση απαγορεύεται στο Vultr. Πριν από την έναρξη, θα πρέπει να γίνει λήψη ενός Proxmox ISO από τον επίσημο ιστότοπο. Θα χρησιμοποιήσουμε το Proxmox VE 5.0 ISO Installer
. Εγκαταστήστε το λειτουργικό σύστημα από την εικόνα με τις προεπιλεγμένες ρυθμίσεις και επανεκκινήστε την εικονική μηχανή. Επίσης, μπορείτε να εγκαταστήσετε με μη αυτόματο τρόπο το proxmox από πηγές, αλλά αυτό δεν είναι απαραίτητο στις περισσότερες περιπτώσεις (ακολουθήστε τις οδηγίες εδώ ).
Ρύθμιση λειτουργικού συστήματος
Συνδεθείτε στον κεντρικό υπολογιστή σας μέσω SSH, ενημερώστε τη λίστα προτύπων proxmox και κατεβάστε ένα κατάλληλο πρότυπο για κοντέινερ.
apt-get update
pveam update
pveam available
pveam download local ubuntu-14.04-standard_14.04-1_amd64.tar.gz
Τώρα, πρέπει να δημιουργήσουμε ένα κοντέινερ linux με διεπαφή δικτύου συνδεδεμένη σε μια γέφυρα linux. Ανοίξτε /etc/network/interfaces
και προσθέστε τις ακόλουθες γραμμές:
auto vmbr1
iface vmbr1 inet static
address 10.100.0.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
Μετά την επανεκκίνηση του συστήματος, μπορείτε να δημιουργήσετε ένα νέο κοντέινερ από το Ubuntu 14.04
πρότυπο.
pct create 200 /var/lib/vz/template/cache/ubuntu-14.04-standard_14.04-1_amd64.tar.gz -storage local-lvm -net0 name=eth0,bridge=vmbr1,ip=10.100.0.200/24,gw=10.100.0.1
Μπορείτε να επαληθεύσετε το κοντέινερ σας χρησιμοποιώντας το pct list
, να ξεκινήσετε το κοντέινερ #200 με pct start 200
και να εισαγάγετε το κέλυφός του με το pct enter 200
. Μπορείτε επίσης να επαληθεύσετε τις ρυθμίσεις και τις διευθύνσεις δικτύου με το ip addr
.
Δίκτυο
Για να παρέχουμε σύνδεση στο διαδίκτυο μέσα στο κοντέινερ σας, πρέπει να ενεργοποιήσουμε το NAT
. Τα παρακάτω θα επιτρέψουν την προώθηση της κυκλοφορίας από το κοντέινερ στο διαδίκτυο με τη βοήθεια της τεχνολογίας NAT. Η vmbr0
γέφυρα συνδέεται με την εξωτερική διεπαφή και η vmbr1
γέφυρα συνδέεται με τα κοντέινερ.
sysctl -w net.ipv4.ip_forward=1
iptables --table nat --append POSTROUTING --out-interface vmbr0 -j MASQUERADE
iptables --append FORWARD --in-interface vmbr1 -j ACCEPT
Εισαγάγετε το κοντέινερ με pct enter 200
και ρυθμίστε τις παραμέτρους του διακομιστή web που βρίσκεται μέσα.
apt-get update
apt-get install nginx
service nginx start
exit
Τώρα, πρέπει να διαμορφώσουμε το Nginx στον διακομιστή σας για να μεταφέρει ιστοτόπους μεσολάβησης σε κοντέινερ.
apt-get update
apt-get install nginx
Δημιουργήστε ένα νέο αρχείο ρυθμίσεων /etc/nginx/sites-available/box200
με το ακόλουθο περιεχόμενο:
server {
listen 80;
server_name server200.example.com;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
location / {
proxy_pass http://10.100.0.200/;
}
}
Το Nginx θα μεταφέρει πλέον κάθε αίτημα HTTP server200.example.com
από τον διακομιστή σας στο κοντέινερ με IP 10.100.0.200. Ενεργοποιήστε αυτήν τη διαμόρφωση.
ln -s /etc/nginx/sites-available/box200 /etc/nginx/sites-enabled/
service nginx restart
Πρόσβαση SSH
Εάν θέλετε να παρέχετε εύκολη πρόσβαση σε sandboxes, πρέπει να προωθήσετε τις περιόδους λειτουργίας SSH στα κοντέινερ. Για να το κάνετε αυτό, δημιουργήστε έναν νέο χρήστη στον κεντρικό διακομιστή σας. Μην ξεχάσετε να εισαγάγετε έναν κωδικό πρόσβασης, άλλες παράμετροι δεν είναι απαραίτητες.
adduser box200
su - box200
ssh-keygen
cat .ssh/id_rsa.pub
exit
Αντιγράψτε αυτό το κλειδί SSH και εισαγάγετε το κοντέινερ για να προσαρτήσετε το κλειδί.
pct enter 200
mkdir .ssh
nano .ssh/authorized_keys
exit
Στον διακομιστή σας, προσθέστε την ακόλουθη γραμμή στο .ssh/authorized_keys
αρχείο.
command="ssh [email protected]",no-X11-forwarding,no-agent-forwarding,no-port-forwarding <YOUR SSH KEY>
Μην ξεχάσετε να αλλάξετε <YOUR SSH KEY>
στο δημόσιο κλειδί του σπιτιού σας. Εναλλακτικά, μπορείτε να εκτελέσετε τα ακόλουθα από τη γραμμή εντολών.
echo 'command="ssh [email protected]",no-X11-forwarding,no-agent-forwarding,no-port-forwarding <YOUR SSH KEY>' >> .ssh/authorized_keys
Στη συνέχεια, μπορείτε να συνδεθείτε στο sandbox σας με ssh.
`ssh box200@<your_server_IP>`
Επιπρόσθετες ρυθμίσεις
Είναι καιρός να εφαρμόσετε αρκετές βελτιώσεις ασφάλειας. Αρχικά, θέλουμε να αλλάξουμε την προεπιλεγμένη θύρα SSH. Στη συνέχεια, θέλουμε να προστατεύσουμε τη σελίδα διαχείρισης Proxmox με βασικό έλεγχο ταυτότητας HTTP.
nano /etc/ssh/sshd_config
Καταργήστε το σχόλιο και αλλάξτε τη γραμμή
#Port 22
προς το
Port 24000
Επανεκκινήστε το ssh.
service ssh restart
Επανασυνδεθείτε στο ssh με τη νέα θύρα.
ssh root@<your_IP> -p 24000
Ορίστε έναν κωδικό πρόσβασης Proxmox.
Δημιουργία αρχείου /etc/default/pveproxy
.
ALLOW_FROM="127.0.0.1"
DENY_FROM="all"
POLICY="allow"
Κάντε επανεκκίνηση pveproxy
για να τεθούν σε ισχύ οι αλλαγές.
/etc/init.d/pveproxy restart
Διαμορφώστε το nginx (αν δεν το έχετε κάνει πριν).
apt-get install nginx
service nginx restart
Δημιουργήστε μια προεπιλεγμένη διαμόρφωση στο /etc/nginx/site-available/default
.
server {
listen 80;
server_name example.com;
rewrite ^ https://$hostname.example.com$request_uri? permanent;
}
server {
listen 443 ssl;
server_name example.com;
#auth_basic "Restricted";
#auth_basic_user_file htpasswd;
#location / { proxy_pass https://127.0.0.1:8006; }
}
Αποκτήστε ένα έγκυρο πιστοποιητικό SSL και ενημερώστε τη διαμόρφωση του nginx. Για παράδειγμα, μπορεί να γίνει με τη βοήθεια του certbox και του letsencrypt. Για περισσότερες πληροφορίες, κάντε κλικ εδώ .
wget https://dl.eff.org/certbot-auto
chmod +x certbot-auto
./certbot-auto --nginx
Τώρα, η διαμόρφωση του nginx θα πρέπει να μοιάζει με αυτό (ή μπορείτε να την αλλάξετε χειροκίνητα μετά). Μην ξεχάσετε να αποσχολιάσετε τις γραμμές ssl, auth και τοποθεσίας.
server {
listen 80;
server_name example.com;
rewrite ^ https://$hostname.example.com$request_uri? permanent;
}
server {
listen 443 ssl;
server_name example.com;
ssl on;
auth_basic "Restricted";
auth_basic_user_file htpasswd;
location / { proxy_pass https://127.0.0.1:8006; }
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
}
Δημιουργήστε ένα /etc/htpasswd
αρχείο χρησιμοποιώντας τη γεννήτρια Htpasswd .
nano /etc/nginx/htpasswd
Επανεκκινήστε το Nginx
service nginx restart
Τώρα μπορείτε να προβάλετε την κονσόλα διαχείρισης https://example.com
μετά τον βασικό έλεγχο ταυτότητας.
Port Forwarding
Τα κοντέινερ είναι πλέον διαθέσιμα με αιτήματα HTTP και SSH. Τώρα, μπορούμε να διαμορφώσουμε την προώθηση θυρών από τον εξωτερικό διακομιστή στα κοντέινερ. Για παράδειγμα, για αντιστοίχιση για example.com:8080
να 10.100.0.200:3000
εισαγάγετε τα ακόλουθα.
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 8080 -j DNAT --to 10.100.0.200:3000
Μπορείτε να δείτε τους τρέχοντες κανόνες.
`iptables -t nat -v -L PREROUTING -n --line-number`
Μπορείτε επίσης να διαγράψετε έναν κανόνα ανά αριθμό με τα εξής.
`iptables -t nat -D PREROUTING <#>`.
Χωριστά δοχεία
Μπορούμε πλέον να έχουμε πρόσβαση σε ένα κοντέινερ από ένα άλλο.
pct create 250 /var/lib/vz/template/cache/ubuntu-14.04-standard_14.04-1_amd64.tar.gz -storage local-lvm -net0 name=eth0,bridge=vmbr1,ip=10.100.0.250/24,gw=10.100.0.1
pct start 250
pct enter 250
ping 10.100.0.200
Εάν θέλετε να περιορίσετε την πρόσβαση από το κοντέινερ 250 στο 200, πρέπει να συνδέσετε κάθε κοντέινερ σε μια προσωπική γέφυρα και να απενεργοποιήσετε την προώθηση μεταξύ γεφυρών.
Διαγράψτε τα υπάρχοντα κοντέινερ.
pct stop 200
pct stop 250
pct destroy 200
pct destroy 250
Αλλάξτε το περιεχόμενο του /etc/network/interfaces
.
auto vmbr1
iface vmbr1 inet static
address 10.100.1.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
auto vmbr2
iface vmbr2 inet static
address 10.100.2.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
reboot
το σύστημα
Ενεργοποίηση προώθησης
`sysctl -w net.ipv4.ip_forward=1`
Για να κάνετε αυτές τις αλλαγές μόνιμες, μπορείτε να επεξεργαστείτε το /etc/sysctl.conf
αρχείο και να βρείτε το παρακάτω κείμενο.
#net.ipv4.ip_forward=1
Αποσχολιάστε το.
net.ipv4.ip_forward=1
Μπορείτε επίσης να τρέξετε sysctl -p
για να κάνετε τις αλλαγές να τεθούν σε ισχύ αμέσως.
Δημιουργήστε δοχεία.
pct create 200 /var/lib/vz/template/cache/ubuntu-14.04-standard_14.04-1_amd64.tar.gz -storage local-lvm -net0 name=eth0,bridge=vmbr1,ip=10.100.1.200/24,gw=10.100.1.1
pct create 250 /var/lib/vz/template/cache/ubuntu-14.04-standard_14.04-1_amd64.tar.gz -storage local-lvm -net0 name=eth0,bridge=vmbr2,ip=10.100.2.250/24,gw=10.100.2.1
Ξεκινήστε τα δοχεία με pct start 200
και pct start 250
.
Ξεπλύνετε τους iptables
κανόνες.
iptables -F
Ενεργοποίηση NAT.
iptables --table nat --append POSTROUTING --out-interface vmbr0 -j MASQUERADE
vmbr0
είναι η γέφυρα που περιλαμβάνει εξωτερική διεπαφή.
Να επιτρέπεται η προώθηση από την εξωτερική διεπαφή.
iptables --append FORWARD --in-interface vmbr0 -j ACCEPT
Να επιτρέπεται η προώθηση από τα κοντέινερ στο διαδίκτυο.
iptables -A FORWARD -i vmbr1 -o vmbr0 -s 10.100.1.0/24 -j ACCEPT
iptables -A FORWARD -i vmbr2 -o vmbr0 -s 10.100.2.0/24 -j ACCEPT
Ρίξτε την άλλη προώθηση.
iptables -A FORWARD -i vmbr1 -j DROP
iptables -A FORWARD -i vmbr2 -j DROP
Τώρα, ελέγξτε ότι 10.100.1.200
μπορεί να κάνει ping 8.8.8.8
αλλά δεν μπορεί να κάνει ping 10.100.2.250
και ότι 10.100.2.250
μπορεί να κάνει ping 8.8.8.8
αλλά δεν μπορεί να κάνει ping 10.100.1.200
.
Η σειρά των εντολών που σχετίζονται με τα iptables είναι σημαντική. Ο καλύτερος τρόπος για να λειτουργήσετε τους κανόνες σας είναι να χρησιμοποιήσετε iptables-persistent
. Αυτό το πακέτο σάς βοηθά να αποθηκεύσετε κανόνες iptables στα αρχεία /etc/iptables/rules.v4
και /etc/iptables/rules.v6
μπορεί να τους φορτώσει αυτόματα μετά την επανεκκίνηση του συστήματος. Απλώς εγκαταστήστε το με τα παρακάτω.
apt-get install iptables-persistent
Επιλέξτε YES
όταν σας ζητηθεί.