Forberedelser
OS opsætning
Netværk
SSH adgang
Yderligere indstillinger
Portvideresendelse
Separerede beholdere
LXC-containere (Linux-containere) er en operativsystemfunktion i Linux, der kan bruges til at køre flere isolerede Linux-systemer på en enkelt vært.
Disse instruktioner vil lede dig gennem de grundlæggende trin i serverkonfigurationen for hosting af isolerede Linux-containere. Vi konfigurerer følgende funktioner:
- LXC containere med Ubuntu 14.
- Linux netværksindstillinger og portvideresendelse til containere.
- SSH videresendelse til containeradministration så simpelt som
ssh [email protected]
ogssh [email protected]
- Nginx proxy-konfiguration til at få adgang til websteder inde i containere (efter værtsnavn).
- Yderligere sikkerhedsforbedringer for korrekt serverstyring.
Denne vejledning antager, at:
- Du har en konto hos Vultr.com .
- Du ved, hvordan du konfigurerer en virtuel maskine med en brugerdefineret ISO.
- Du ved, hvordan du bruger SSH-nøgler, og du har allerede genereret offentlige og private nøgler.
I slutningen af selvstudiet får vi to virtuelle containere, der vil have adgang til internettet, men som ikke kan pinge hinanden. Vi vil også konfigurere port forwarding fra example.com
til containere. Vi vil implementere et sikkert konfigurations- og administrationspanel ved hjælp af værktøjer fra Proxmox-pakken.
Forberedelser
Vi vil kun bruge Proxmox til håndtering af LXC-containere. Generelt understøtter den også KVM, men indlejret virtualisering er forbudt på Vultr. Før start skal en Proxmox ISO downloades fra den officielle hjemmeside. Vi vil bruge Proxmox VE 5.0 ISO Installer
. Installer OS fra billedet med standardindstillinger og genstart den virtuelle maskine. Du kan også manuelt installere proxmox fra kilder, men det er ikke nødvendigt i de fleste tilfælde (følg instruktionerne her ).
OS opsætning
Opret forbindelse til din vært via SSH, opdater listen over proxmox-skabeloner og download en passende skabelon til containere.
apt-get update
pveam update
pveam available
pveam download local ubuntu-14.04-standard_14.04-1_amd64.tar.gz
Nu skal vi oprette en linux-beholder med netværksgrænseflade forbundet til en linux-bro. Åbn /etc/network/interfaces
og tilføj følgende linjer:
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
Efter systemgenstart kan du oprette en ny container fra Ubuntu 14.04
skabelonen.
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
Du kan verificere din container ved at bruge pct list
, start container #200 med pct start 200
og indtast dens shell med pct enter 200
. Du kan også bekræfte netværksindstillinger og adresser med ip addr
.
Netværk
For at give internetforbindelse inde i din container skal vi aktivere NAT
. Følgende vil tillade, at trafik videresendes fra containeren til internettet ved hjælp af NAT-teknologi. Den vmbr0
bro er forbundet til den eksterne grænseflade og vmbr1
broen er forbundet til beholderne.
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
Gå ind i containeren med pct enter 200
og konfigurer webserveren inde.
apt-get update
apt-get install nginx
service nginx start
exit
Nu skal vi konfigurere Nginx på din server til at proxy-websteder til containere.
apt-get update
apt-get install nginx
Opret en ny konfigurationsfil /etc/nginx/sites-available/box200
med følgende indhold:
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 vil nu proxy for hver HTTP-anmodning server200.example.com
fra din server til containeren med IP 10.100.0.200. Aktiver denne konfiguration.
ln -s /etc/nginx/sites-available/box200 /etc/nginx/sites-enabled/
service nginx restart
SSH adgang
Hvis du vil give nem adgang til sandkasser, skal du videresende SSH-sessioner til containerne. For at gøre det skal du oprette en ny bruger på din rodserver. Glem ikke at indtaste en adgangskode, andre parametre er ikke nødvendige.
adduser box200
su - box200
ssh-keygen
cat .ssh/id_rsa.pub
exit
Kopiér denne SSH-nøgle og indtast beholderen for at tilføje nøglen.
pct enter 200
mkdir .ssh
nano .ssh/authorized_keys
exit
På din server skal du tilføje følgende linje til .ssh/authorized_keys
filen.
command="ssh [email protected]",no-X11-forwarding,no-agent-forwarding,no-port-forwarding <YOUR SSH KEY>
Glem ikke at skifte <YOUR SSH KEY>
til din offentlige hjemmenøgle. Alternativt kan du køre følgende fra kommandolinjen.
echo 'command="ssh [email protected]",no-X11-forwarding,no-agent-forwarding,no-port-forwarding <YOUR SSH KEY>' >> .ssh/authorized_keys
Derefter kan du oprette forbindelse til din sandbox med ssh.
`ssh box200@<your_server_IP>`
Yderligere indstillinger
Det er på tide at implementere adskillige sikkerhedsforbedringer. Først vil vi ændre standard SSH-porten. Så vil vi beskytte vores Proxmox-administrationsside med grundlæggende HTTP-godkendelse.
nano /etc/ssh/sshd_config
Fjern kommentarer og skift linje
#Port 22
til
Port 24000
Genstart ssh.
service ssh restart
Genopret forbindelse til ssh med den nye port.
ssh root@<your_IP> -p 24000
Indstil en Proxmox-adgangskode.
Opret fil /etc/default/pveproxy
.
ALLOW_FROM="127.0.0.1"
DENY_FROM="all"
POLICY="allow"
Genstart pveproxy
for at ændringerne træder i kraft.
/etc/init.d/pveproxy restart
Konfigurer nginx (hvis du ikke har gjort det før).
apt-get install nginx
service nginx restart
Opret en standardkonfiguration i /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; }
}
Få et gyldigt SSL-certifikat og opdater din nginx-konfiguration. Det kan for eksempel gøres ved hjælp af certbox og letsencrypt. For mere information, klik her .
wget https://dl.eff.org/certbot-auto
chmod +x certbot-auto
./certbot-auto --nginx
Nu skulle din nginx-konfiguration se sådan ud (eller du kan ændre den manuelt efter). Glem ikke at fjerne kommentarer til ssl-, auth- og lokationslinjer.
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
}
Opret en /etc/htpasswd
fil ved hjælp af Htpasswd-generatoren .
nano /etc/nginx/htpasswd
Genstart Nginx
service nginx restart
Du kan nu se administrationskonsollen på https://example.com
efter grundlæggende godkendelse.
Portvideresendelse
Containerne er nu tilgængelige via HTTP-anmodninger og SSH. Nu kan vi konfigurere portvideresendelse fra den eksterne server til containerne. For eksempel til kortlægning for example.com:8080
at 10.100.0.200:3000
indtaste følgende.
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 8080 -j DNAT --to 10.100.0.200:3000
Du kan se de aktuelle regler.
`iptables -t nat -v -L PREROUTING -n --line-number`
Du kan også slette en regel efter nummer med følgende.
`iptables -t nat -D PREROUTING <#>`.
Separerede beholdere
Vi kan nu få adgang til en container fra en anden.
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
Hvis du vil begrænse adgangen fra container 250 til 200, skal du forbinde hver container til en personlig bro og deaktivere videresendelse mellem broer.
Slet eksisterende containere.
pct stop 200
pct stop 250
pct destroy 200
pct destroy 250
Skift indholdet af /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
systemet
Aktiver videresendelse
`sysctl -w net.ipv4.ip_forward=1`
For at gøre disse ændringer permanente, kan du redigere /etc/sysctl.conf
filen og finde følgende tekst.
#net.ipv4.ip_forward=1
Fjern kommentarer.
net.ipv4.ip_forward=1
Du kan også løbe for sysctl -p
at få ændringerne til at træde i kraft med det samme.
Opret containere.
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
Start beholderne med pct start 200
og pct start 250
.
Skyl iptables
reglerne.
iptables -F
Aktiver NAT.
iptables --table nat --append POSTROUTING --out-interface vmbr0 -j MASQUERADE
vmbr0
er broen, som inkluderer ekstern grænseflade.
Tillad videresendelse fra den eksterne grænseflade.
iptables --append FORWARD --in-interface vmbr0 -j ACCEPT
Tillad videresendelse fra containerne til internettet.
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
Drop den anden viderestilling.
iptables -A FORWARD -i vmbr1 -j DROP
iptables -A FORWARD -i vmbr2 -j DROP
Tjek nu, at 10.100.1.200
kan ping 8.8.8.8
men ikke ping, 10.100.2.250
og at 10.100.2.250
kan ping 8.8.8.8
men ikke ping 10.100.1.200
.
Rækkefølgen af kommandoer relateret til iptables er vigtig. Den bedste måde at betjene dine regler på er at bruge iptables-persistent
. Denne pakke hjælper dig med at spare iptables regler til filerne /etc/iptables/rules.v4
og /etc/iptables/rules.v6
og det kan automatisk indlæse dem efter genstart af systemet. Bare installer det med følgende.
apt-get install iptables-persistent
Vælg, YES
når du bliver bedt om det.