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.comtil 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/interfacesog 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.04skabelonen.
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 200og 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 vmbr0bro er forbundet til den eksterne grænseflade og vmbr1broen 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 200og 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/box200med 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.comfra 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_keysfilen.
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 pveproxyfor 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/htpasswdfil ved hjælp af Htpasswd-generatoren .
nano /etc/nginx/htpasswd
Genstart Nginx
service nginx restart
Du kan nu se administrationskonsollen på https://example.comefter 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:8080at 10.100.0.200:3000indtaste 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
 
- rebootsystemet
 
- Aktiver videresendelse  - `sysctl -w net.ipv4.ip_forward=1`
 - For at gøre disse ændringer permanente, kan du redigere - /etc/sysctl.conffilen og finde følgende tekst.
 - #net.ipv4.ip_forward=1
 - Fjern kommentarer.  - net.ipv4.ip_forward=1
 - Du kan også løbe for - sysctl -pat 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 200og- pct start 250.
 
- Skyl - iptablesreglerne.
 - iptables -F
 
- Aktiver NAT. - iptables --table nat --append POSTROUTING --out-interface vmbr0 -j MASQUERADE
 - vmbr0er 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.200kan ping 8.8.8.8men ikke ping, 10.100.2.250og at 10.100.2.250kan ping 8.8.8.8men 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.v4og /etc/iptables/rules.v6og det kan automatisk indlæse dem efter genstart af systemet. Bare installer det med følgende.
apt-get install iptables-persistent
Vælg, YESnår du bliver bedt om det.