Forberedelser
OS-oppsett
Nettverk
SSH-tilgang
Tilleggsinnstillinger
Port Forwarding
Separerte beholdere
LXC-beholdere (Linux-beholdere) er en operativsystemfunksjon i Linux som kan brukes til å kjøre flere isolerte Linux-systemer på en enkelt vert.
Disse instruksjonene vil lede deg gjennom grunnleggende trinn for serverkonfigurasjon for isolerte Linux-beholdere. Vi vil konfigurere følgende funksjoner:
- LXC-beholdere med Ubuntu 14.
- Linux-nettverksinnstillinger og portvideresending for containere.
- SSH videresending for containeradministrasjon så enkelt som
ssh [email protected]
ogssh [email protected]
- Nginx proxy-konfigurasjon for tilgang til nettsteder inne i containere (etter vertsnavn).
- Ytterligere sikkerhetsforbedringer for riktig serveradministrasjon.
Denne veiledningen forutsetter at:
- Du har en konto på Vultr.com .
- Du vet hvordan du konfigurerer en virtuell maskin med en tilpasset ISO.
- Du vet hvordan du bruker SSH-nøkler, og du har allerede generert offentlige og private nøkler.
På slutten av opplæringen får vi to virtuelle beholdere som vil ha tilgang til internett, men som ikke kan pinge hverandre. Vi vil også konfigurere portvideresending fra example.com
til containere. Vi vil distribuere et sikkert konfigurasjons- og administrasjonspanel ved hjelp av verktøy fra Proxmox-pakken.
Forberedelser
Vi vil kun bruke Proxmox for administrasjon av LXC-beholdere. Generelt støtter den også KVM, men nestet virtualisering er forbudt på Vultr. Før start bør en Proxmox ISO lastes ned fra den offisielle nettsiden. Vi vil bruke Proxmox VE 5.0 ISO Installer
. Installer OS fra bildet med standardinnstillinger og start den virtuelle maskinen på nytt. Du kan også manuelt installere proxmox fra kilder, men det er ikke nødvendig i de fleste tilfeller (følg instruksjonene her ).
OS-oppsett
Koble til verten din med SSH, oppdater listen over proxmox-maler og last ned en passende mal for containere.
apt-get update
pveam update
pveam available
pveam download local ubuntu-14.04-standard_14.04-1_amd64.tar.gz
Nå må vi lage en linux-beholder med nettverksgrensesnitt koblet til en linux-bro. Åpne /etc/network/interfaces
og legg til 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
Etter omstart av systemet kan du opprette en ny beholder fra Ubuntu 14.04
malen.
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 bekrefte beholderen din ved å bruke pct list
, starte beholder #200 med pct start 200
og angi skallet med pct enter 200
. Du kan også bekrefte nettverksinnstillinger og adresser med ip addr
.
Nettverk
For å tilby Internett-tilkobling inne i beholderen din, må vi aktivere NAT
. Følgende vil tillate at trafikk videresendes fra containeren til internett ved hjelp av NAT-teknologi. Den vmbr0
bro er koblet til det eksterne grensesnittet og vmbr1
broen er forbundet med 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å inn i beholderen med pct enter 200
og konfigurer webserveren inne.
apt-get update
apt-get install nginx
service nginx start
exit
Nå må vi konfigurere Nginx på serveren din til å proxy-servere nettsteder til containere.
apt-get update
apt-get install nginx
Opprett en ny konfigurasjonsfil /etc/nginx/sites-available/box200
med følgende innhold:
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 nå proxy for hver HTTP-forespørsel server200.example.com
fra serveren din til beholderen med IP 10.100.0.200. Aktiver denne konfigurasjonen.
ln -s /etc/nginx/sites-available/box200 /etc/nginx/sites-enabled/
service nginx restart
SSH-tilgang
Hvis du vil gi enkel tilgang til sandkasser, må du videresende SSH-økter til containerne. For å gjøre det, opprett en ny bruker på rotserveren din. Ikke glem å legge inn et passord, andre parametere er ikke nødvendige.
adduser box200
su - box200
ssh-keygen
cat .ssh/id_rsa.pub
exit
Kopier denne SSH-nøkkelen og skriv inn beholderen for å legge til nøkkelen.
pct enter 200
mkdir .ssh
nano .ssh/authorized_keys
exit
På serveren din legger du til følgende linje i .ssh/authorized_keys
filen.
command="ssh [email protected]",no-X11-forwarding,no-agent-forwarding,no-port-forwarding <YOUR SSH KEY>
Ikke glem å bytte <YOUR SSH KEY>
til din offentlige hjemmenøkkel. Alternativt kan du kjø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
Deretter kan du koble til sandkassen din med ssh.
`ssh box200@<your_server_IP>`
Tilleggsinnstillinger
Det er på tide å implementere flere sikkerhetsforbedringer. Først vil vi endre standard SSH-port. Da ønsker vi å beskytte vår Proxmox-administrasjonsside med grunnleggende HTTP-autentisering.
nano /etc/ssh/sshd_config
Avkommenter og endre linjen
#Port 22
til
Port 24000
Start ssh på nytt.
service ssh restart
Koble til ssh på nytt med den nye porten.
ssh root@<your_IP> -p 24000
Angi et Proxmox-passord.
Opprett fil /etc/default/pveproxy
.
ALLOW_FROM="127.0.0.1"
DENY_FROM="all"
POLICY="allow"
Start pveproxy
på nytt for at endringene skal tre i kraft.
/etc/init.d/pveproxy restart
Konfigurer nginx (hvis du ikke har gjort det før).
apt-get install nginx
service nginx restart
Opprett en standardkonfigurasjon 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; }
}
Skaff deg et gyldig SSL-sertifikat og oppdater nginx-konfigurasjonen. For eksempel kan det gjøres ved hjelp av certbox og letsencrypt. For mer informasjon, klikk her .
wget https://dl.eff.org/certbot-auto
chmod +x certbot-auto
./certbot-auto --nginx
Nå skal nginx-konfigurasjonen din se slik ut (eller du kan endre den manuelt etterpå). Ikke glem å avkommentere ssl-, auth- og plasseringslinjer.
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
}
Lag en /etc/htpasswd
fil ved hjelp av Htpasswd-generatoren .
nano /etc/nginx/htpasswd
Start Nginx på nytt
service nginx restart
Du kan nå se administrasjonskonsollen på https://example.com
etter grunnleggende autentisering.
Port Forwarding
Beholderne er nå tilgjengelige med HTTP-forespørsler og SSH. Nå kan vi konfigurere portvideresending fra den eksterne serveren til containerne. For eksempel for tilordning for example.com:8080
å 10.100.0.200:3000
legge inn følgende.
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 8080 -j DNAT --to 10.100.0.200:3000
Du kan se gjeldende regler.
`iptables -t nat -v -L PREROUTING -n --line-number`
Du kan også slette en regel etter nummer med følgende.
`iptables -t nat -D PREROUTING <#>`.
Separerte beholdere
Vi kan nå få tilgang til en container fra en annen.
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 begrense tilgangen fra container 250 til 200, må du koble hver container til en personlig bro og deaktivere videresending mellom broer.
Slett eksisterende beholdere.
pct stop 200
pct stop 250
pct destroy 200
pct destroy 250
Endre innholdet i /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 videresending
`sysctl -w net.ipv4.ip_forward=1`
For å gjøre disse endringene permanente, kan du redigere /etc/sysctl.conf
filen og finne følgende tekst.
#net.ipv4.ip_forward=1
Fjern kommentaren.
net.ipv4.ip_forward=1
Du kan også løpe for sysctl -p
å få endringene til å tre i kraft umiddelbart.
Lag 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
.
Skyll iptables
reglene.
iptables -F
Aktiver NAT.
iptables --table nat --append POSTROUTING --out-interface vmbr0 -j MASQUERADE
vmbr0
er broen som inkluderer eksternt grensesnitt.
Tillat videresending fra det eksterne grensesnittet.
iptables --append FORWARD --in-interface vmbr0 -j ACCEPT
Tillat videresending fra containerne til internett.
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
Slipp den andre videresendingen.
iptables -A FORWARD -i vmbr1 -j DROP
iptables -A FORWARD -i vmbr2 -j DROP
Nå, sjekk at 10.100.1.200
kan ping 8.8.8.8
men kan ikke ping 10.100.2.250
og som 10.100.2.250
kan ping 8.8.8.8
men kan ikke ping 10.100.1.200
.
Rekkefølgen på kommandoer relatert til iptables er viktig. Den beste måten å bruke reglene på er å bruke iptables-persistent
. Denne pakken hjelper deg med å lagre iptables-regler til filene /etc/iptables/rules.v4
, /etc/iptables/rules.v6
og den kan laste dem automatisk etter omstart av systemet. Bare installer den med følgende.
apt-get install iptables-persistent
Velg YES
når du blir bedt om det.