Pripreme
Postavljanje OS-a
Mreža
SSH pristup
Dodatne postavke
Port Forwarding
Odvojeni kontejneri
LXC spremnici (Linux spremnici) su značajka operacijskog sustava u Linuxu koja se može koristiti za pokretanje više izoliranih Linux sustava na jednom hostu.
Ove upute će vas provesti kroz osnovne korake konfiguracije poslužitelja za izolirani hosting Linux kontejnera. Konfigurirat ćemo sljedeće značajke:
- LXC kontejneri s Ubuntu 14.
- Linux mrežne postavke i prosljeđivanje portova za spremnike.
- SSH prosljeđivanje za administraciju kontejnera jednostavno kao
ssh box1@example.comissh box2@example.com
- Nginx proxy konfiguracija za pristup web stranicama unutar spremnika (prema imenu hosta).
- Dodatna sigurnosna poboljšanja za pravilno upravljanje poslužiteljem.
Ovaj vodič pretpostavlja da:
- Imate račun na Vultr.com .
- Znate kako konfigurirati virtualni stroj s prilagođenim ISO-om.
- Znate koristiti SSH ključeve i već ste generirali javne i privatne ključeve.
Na kraju tutoriala dobit ćemo dva virtualna kontejnera koji će imati pristup internetu, ali ne mogu pingati jedan drugog. Također ćemo konfigurirati prosljeđivanje portova od example.comdo kontejnera. Sigurnu konfiguraciju i upravljačku ploču postavit ćemo uz pomoć alata iz Proxmox paketa.
Pripreme
Proxmox ćemo koristiti samo za upravljanje LXC kontejnerima. Općenito, također podržava KVM, ali ugniježđena virtualizacija je zabranjena na Vultru. Prije početka potrebno je preuzeti Proxmox ISO sa službene web stranice. Koristit ćemo Proxmox VE 5.0 ISO Installer. Instalirajte OS sa slike sa zadanim postavkama i ponovno pokrenite virtualni stroj. Također, možete ručno instalirati proxmox iz izvora, ali to u većini slučajeva nije potrebno (slijedite upute ovdje ).
Postavljanje OS-a
Povežite se sa svojim hostom putem SSH-a, ažurirajte popis proxmox predložaka i preuzmite odgovarajući predložak za spremnike.
apt-get update
pveam update
pveam available
pveam download local ubuntu-14.04-standard_14.04-1_amd64.tar.gz
Sada moramo stvoriti linux spremnik s mrežnim sučeljem spojenim na linux most. Otvorite /etc/network/interfacesi dodajte sljedeće retke:
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
Nakon ponovnog pokretanja sustava, možete stvoriti novi spremnik iz Ubuntu 14.04predloška.
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
Možete provjeriti svoj spremnik pomoću pct list, pokrenuti spremnik #200 s pct start 200i unijeti njegovu ljusku s pct enter 200. Također možete provjeriti mrežne postavke i adrese pomoću ip addr.
Mreža
Da bismo omogućili internetsku vezu unutar vašeg spremnika, moramo omogućiti NAT. Sljedeće će omogućiti prosljeđivanje prometa iz kontejnera na internet uz pomoć NAT tehnologije. vmbr0Mosta spojen na vanjski sučelje i vmbr1most povezan s kontejnerima.
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
Unesite spremnik s pct enter 200i konfigurirajte web poslužitelj unutra.
apt-get update
apt-get install nginx
service nginx start
exit
Sada moramo konfigurirati Nginx na vašem poslužitelju da proxy web stranice u kontejnere.
apt-get update
apt-get install nginx
Napravite novu konfiguracijsku datoteku /etc/nginx/sites-available/box200sa sljedećim sadržajem:
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 će sada proxy svaki HTTP zahtjev server200.example.coms vašeg poslužitelja u spremnik s IP-om 10.100.0.200. Aktivirajte ovu konfiguraciju.
ln -s /etc/nginx/sites-available/box200 /etc/nginx/sites-enabled/
service nginx restart
SSH pristup
Ako želite omogućiti lak pristup sandboxovima, morate proslijediti SSH sesije u spremnike. Da biste to učinili, stvorite novog korisnika na svom korijenskom poslužitelju. Ne zaboravite unijeti lozinku, drugi parametri nisu potrebni.
adduser box200
su - box200
ssh-keygen
cat .ssh/id_rsa.pub
exit
Kopirajte ovaj SSH ključ i unesite spremnik da dodate ključ.
pct enter 200
mkdir .ssh
nano .ssh/authorized_keys
exit
Na svom poslužitelju dodajte sljedeći redak u .ssh/authorized_keysdatoteku.
command="ssh root@10.100.0.200",no-X11-forwarding,no-agent-forwarding,no-port-forwarding <YOUR SSH KEY>
Ne zaboravite promijeniti <YOUR SSH KEY>svoj kućni javni ključ. Alternativno, možete pokrenuti sljedeće iz naredbenog retka.
echo 'command="ssh root@10.100.0.200",no-X11-forwarding,no-agent-forwarding,no-port-forwarding <YOUR SSH KEY>' >> .ssh/authorized_keys
Zatim se možete povezati sa svojim sandboxom pomoću ssh-a.
`ssh box200@<your_server_IP>`
Dodatne postavke
Vrijeme je za implementaciju nekoliko sigurnosnih poboljšanja. Prvo, želimo promijeniti zadani SSH port. Zatim želimo zaštititi našu stranicu za upravljanje Proxmoxom osnovnom HTTP autentifikacijom.
nano /etc/ssh/sshd_config
Dekomentirajte i promijenite redak
#Port 22
do
Port 24000
Ponovno pokrenite ssh.
service ssh restart
Ponovno se povežite na ssh s novim portom.
ssh root@<your_IP> -p 24000
Postavite lozinku za Proxmox.
Napravite datoteku /etc/default/pveproxy.
ALLOW_FROM="127.0.0.1"
DENY_FROM="all"
POLICY="allow"
Ponovo pokrenite pveproxykako bi promjene stupile na snagu.
/etc/init.d/pveproxy restart
Konfigurirajte nginx (ako to niste učinili prije).
apt-get install nginx
service nginx restart
Napravite zadanu konfiguraciju u /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; }
}
Nabavite važeći SSL certifikat i ažurirajte svoju nginx konfiguraciju. Na primjer, to se može učiniti uz pomoć certboxa i letsencrypta. Za više informacija kliknite ovdje .
wget https://dl.eff.org/certbot-auto
chmod +x certbot-auto
./certbot-auto --nginx
Sada bi vaša nginx konfiguracija trebala izgledati ovako (ili je možete promijeniti ručno nakon toga). Nemojte zaboraviti dekomentirati retke ssl, auth i location.
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
}
Napravite /etc/htpasswddatoteku pomoću Htpasswd generatora .
nano /etc/nginx/htpasswd
Ponovno pokrenite Nginx
service nginx restart
Sada možete vidjeti upravljačku konzolu https://example.comnakon osnovne provjere autentičnosti.
Port Forwarding
Spremnici su sada dostupni putem HTTP zahtjeva i SSH-a. Sada možemo konfigurirati prosljeđivanje portova s vanjskog poslužitelja na spremnike. Na primjer, za mapiranje example.com:8080za 10.100.0.200:3000unos sljedećeg.
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 8080 -j DNAT --to 10.100.0.200:3000
Možete vidjeti trenutna pravila.
`iptables -t nat -v -L PREROUTING -n --line-number`
Također možete izbrisati pravilo po broju sa sljedećim.
`iptables -t nat -D PREROUTING <#>`.
Odvojeni kontejneri
Sada možemo pristupiti jednom spremniku iz drugog.
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
Ako želite ograničiti pristup s spremnika 250 na 200, morate svaki spremnik povezati s osobnim mostom i onemogućiti prosljeđivanje između mostova.
Izbrišite postojeće spremnike.
pct stop 200
pct stop 250
pct destroy 200
pct destroy 250
Promijenite sadržaj /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 sustav
Omogući prosljeđivanje
`sysctl -w net.ipv4.ip_forward=1`
Kako biste ove promjene učinili trajnim, možete urediti /etc/sysctl.confdatoteku i pronaći sljedeći tekst.
#net.ipv4.ip_forward=1
Odkomentiraj.
net.ipv4.ip_forward=1
Također možete pokrenuti sysctl -pkako bi promjene odmah stupile na snagu.
Napravite kontejnere.
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
Započnite spremnike sa pct start 200i pct start 250.
Ispraznite iptablespravila.
iptables -F
Omogućite NAT.
iptables --table nat --append POSTROUTING --out-interface vmbr0 -j MASQUERADE
vmbr0 je most koji uključuje vanjsko sučelje.
Dopusti prosljeđivanje s vanjskog sučelja.
iptables --append FORWARD --in-interface vmbr0 -j ACCEPT
Dopustite prosljeđivanje iz kontejnera na 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
Odbacite drugo prosljeđivanje.
iptables -A FORWARD -i vmbr1 -j DROP
iptables -A FORWARD -i vmbr2 -j DROP
Sada provjerite da 10.100.1.200može pingati, 8.8.8.8ali ne može pingati 10.100.2.250i da 10.100.2.250može pingati, 8.8.8.8ali ne može ping 10.100.1.200.
Redoslijed naredbi povezanih s iptables je važan. Najbolji način upravljanja svojim pravilima je korištenje iptables-persistent. Ovaj paket vam pomaže da spremite iptables pravila u datoteke /etc/iptables/rules.v4i /etc/iptables/rules.v6može ih automatski učitati nakon ponovnog pokretanja sustava. Samo ga instalirajte sa sljedećim.
apt-get install iptables-persistent
Odaberite YESkada se to od vas zatraži.