Priprave
Nastavitev OS
omrežje
SSH dostop
Dodatne nastavitve
Posredovanje vrat
Ločene posode
Vsebniki LXC (vsebniki Linux) so funkcija operacijskega sistema v Linuxu, ki se lahko uporablja za zagon več izoliranih sistemov Linux na enem gostitelju.
Ta navodila vas bodo vodila skozi osnovne korake konfiguracije strežnika za gostovanje izoliranih zabojnikov Linux. Konfigurirali bomo naslednje funkcije:
- LXC zabojniki z Ubuntu 14.
- Nastavitve omrežja Linux in posredovanje vrat za vsebnike.
- Posredovanje SSH za upravljanje vsebnikov je tako preprosto kot
ssh [email protected]
inssh [email protected]
- Konfiguracija proxyja Nginx za dostop do spletnih mest znotraj vsebnikov (z imenom gostitelja).
- Dodatne varnostne izboljšave za pravilno upravljanje strežnika.
Ta vodnik predvideva, da:
- Imate račun na Vultr.com .
- Veste, kako konfigurirati navidezni stroj z ISO po meri.
- Znate uporabljati ključe SSH in že ste ustvarili javne in zasebne ključe.
Na koncu vadnice bomo dobili dva virtualna vsebnika, ki bosta imela dostop do interneta, vendar se ne moreta pingati drug drugega. Konfigurirali bomo tudi posredovanje vrat iz example.com
v vsebnike. Varno konfiguracijsko in upravljalno ploščo bomo namestili s pomočjo orodij iz Proxmox paketa.
Priprave
Proxmox bomo uporabljali samo za upravljanje zabojnikov LXC. Na splošno podpira tudi KVM, vendar je ugnezdena virtualizacija na Vultru prepovedana. Pred začetkom je treba s uradne spletne strani prenesti Proxmox ISO. Uporabili bomo Proxmox VE 5.0 ISO Installer
. Namestite OS iz slike s privzetimi nastavitvami in znova zaženite virtualni stroj. Prav tako lahko ročno namestite proxmox iz virov, vendar to v večini primerov ni potrebno (sledite navodilom tukaj ).
Nastavitev OS
Povežite se s svojim gostiteljem prek SSH, posodobite seznam predlog proxmox in prenesite ustrezno predlogo za vsebnike.
apt-get update
pveam update
pveam available
pveam download local ubuntu-14.04-standard_14.04-1_amd64.tar.gz
Zdaj moramo ustvariti vsebnik linux z omrežnim vmesnikom, ki je povezan z linuxovim mostom. Odprite /etc/network/interfaces
in dodajte naslednje vrstice:
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
Po ponovnem zagonu sistema lahko iz Ubuntu 14.04
predloge ustvarite nov vsebnik .
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
Svoj vsebnik lahko preverite z pct list
, zaženete vsebnik #200 z pct start 200
in vnesete njegovo lupino z pct enter 200
. Omrežne nastavitve in naslove lahko preverite tudi z ip addr
.
omrežje
Za zagotavljanje internetne povezave v vašem vsebniku moramo omogočiti NAT
. Naslednje bo omogočilo posredovanje prometa iz zabojnika v internet s pomočjo NAT tehnologije. vmbr0
Most je povezan z zunanjim vmesnikom in vmbr1
most priključen na vsebnike.
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
Vnesite vsebnik z pct enter 200
in v njem konfigurirajte spletni strežnik.
apt-get update
apt-get install nginx
service nginx start
exit
Zdaj moramo na vašem strežniku konfigurirati Nginx za proxy spletnih mest v vsebnike.
apt-get update
apt-get install nginx
Ustvarite novo konfiguracijsko datoteko /etc/nginx/sites-available/box200
z naslednjo vsebino:
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 bo zdaj proxy za vsako zahtevo HTTP server200.example.com
iz vašega strežnika v vsebnik z IP 10.100.0.200. Aktivirajte to konfiguracijo.
ln -s /etc/nginx/sites-available/box200 /etc/nginx/sites-enabled/
service nginx restart
SSH dostop
Če želite zagotoviti enostaven dostop do peskovnikov, morate posredovati seje SSH v vsebnike. Če želite to narediti, ustvarite novega uporabnika na vašem korenskem strežniku. Ne pozabite vnesti gesla, drugi parametri niso potrebni.
adduser box200
su - box200
ssh-keygen
cat .ssh/id_rsa.pub
exit
Kopirajte ta ključ SSH in vnesite vsebnik, da dodate ključ.
pct enter 200
mkdir .ssh
nano .ssh/authorized_keys
exit
V strežniku dodajte naslednjo vrstico v .ssh/authorized_keys
datoteko.
command="ssh [email protected]",no-X11-forwarding,no-agent-forwarding,no-port-forwarding <YOUR SSH KEY>
Ne pozabite spremeniti <YOUR SSH KEY>
domačega javnega ključa. Druga možnost je, da iz ukazne vrstice zaženete naslednje.
echo 'command="ssh [email protected]",no-X11-forwarding,no-agent-forwarding,no-port-forwarding <YOUR SSH KEY>' >> .ssh/authorized_keys
Nato se lahko povežete s svojim peskovnikom s ssh.
`ssh box200@<your_server_IP>`
Dodatne nastavitve
Čas je za uvedbo več varnostnih izboljšav. Najprej želimo spremeniti privzeta vrata SSH. Nato želimo svojo stran za upravljanje Proxmoxa zaščititi z osnovnim preverjanjem pristnosti HTTP.
nano /etc/ssh/sshd_config
Odkomentirajte in spremenite vrstico
#Port 22
do
Port 24000
Znova zaženi ssh.
service ssh restart
Znova se povežite s ssh z novimi vrati.
ssh root@<your_IP> -p 24000
Nastavite geslo za Proxmox.
Ustvari datoteko /etc/default/pveproxy
.
ALLOW_FROM="127.0.0.1"
DENY_FROM="all"
POLICY="allow"
Znova zaženite, pveproxy
da bodo spremembe začele veljati.
/etc/init.d/pveproxy restart
Konfigurirajte nginx (če tega še niste storili).
apt-get install nginx
service nginx restart
Ustvarite privzeto konfiguracijo v /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; }
}
Pridobite veljavno potrdilo SSL in posodobite konfiguracijo nginx. Na primer, to je mogoče storiti s pomočjo certbox in letsencrypt. Za več informacij kliknite tukaj .
wget https://dl.eff.org/certbot-auto
chmod +x certbot-auto
./certbot-auto --nginx
Zdaj bi morala vaša konfiguracija nginx izgledati tako (ali pa jo lahko pozneje spremenite ročno). Ne pozabite odstraniti komentarjev ssl, auth in lokacijskih vrstic.
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
}
Ustvarite /etc/htpasswd
datoteko z generatorjem Htpasswd .
nano /etc/nginx/htpasswd
Znova zaženite Nginx
service nginx restart
Zdaj si lahko ogledate upravljalno konzolo https://example.com
po osnovni avtentikaciji.
Posredovanje vrat
Vsebniki so zdaj na voljo prek zahtev HTTP in SSH. Zdaj lahko konfiguriramo posredovanje vrat iz zunanjega strežnika v vsebnike. Na primer, za preslikavo example.com:8080
za 10.100.0.200:3000
vnos naslednjega.
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 8080 -j DNAT --to 10.100.0.200:3000
Ogledate si lahko trenutna pravila.
`iptables -t nat -v -L PREROUTING -n --line-number`
Pravilo lahko izbrišete tudi po številki z naslednjim.
`iptables -t nat -D PREROUTING <#>`.
Ločene posode
Zdaj lahko dostopamo do enega vsebnika iz drugega.
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
Če želite omejiti dostop iz vsebnika 250 do 200, morate vsak vsebnik povezati z osebnim mostom in onemogočiti posredovanje med mostovi.
Izbrišite obstoječe vsebnike.
pct stop 200
pct stop 250
pct destroy 200
pct destroy 250
Spremenite vsebino /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
sistem
Omogoči posredovanje
`sysctl -w net.ipv4.ip_forward=1`
Če želite, da bodo te spremembe trajne, lahko uredite /etc/sysctl.conf
datoteko in poiščete naslednje besedilo.
#net.ipv4.ip_forward=1
Odkomentiraj.
net.ipv4.ip_forward=1
Prav tako lahko zaženete, sysctl -p
da spremembe začnejo veljati takoj.
Ustvarite vsebnike.
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
Začnite posode z pct start 200
in pct start 250
.
Izbrišite iptables
pravila.
iptables -F
Omogoči NAT.
iptables --table nat --append POSTROUTING --out-interface vmbr0 -j MASQUERADE
vmbr0
je most, ki vključuje zunanji vmesnik.
Dovoli posredovanje iz zunanjega vmesnika.
iptables --append FORWARD --in-interface vmbr0 -j ACCEPT
Dovoli posredovanje iz zabojnikov v internet.
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
Zavrzi drugo posredovanje.
iptables -A FORWARD -i vmbr1 -j DROP
iptables -A FORWARD -i vmbr2 -j DROP
Zdaj preverite, ali 10.100.1.200
lahko pinga, 8.8.8.8
vendar ne more ping, 10.100.2.250
in ali 10.100.2.250
lahko pinga, 8.8.8.8
vendar ne more ping 10.100.1.200
.
Pomemben je vrstni red ukazov, povezanih z iptables. Najboljši način za uporabo svojih pravil je uporaba iptables-persistent
. Ta paket vam pomaga rešiti iptables pravila za datoteke /etc/iptables/rules.v4
in /etc/iptables/rules.v6
in jih lahko samodejno naloži po ponovnemu zagonu sistema. Samo namestite ga z naslednjim.
apt-get install iptables-persistent
Izberite, YES
ko ste pozvani.