Implementeer en beheer LXC-containers veilig op Ubuntu 14.04

LXC-containers (Linux-containers) zijn een besturingssysteemfunctie in Linux die kan worden gebruikt om meerdere geïsoleerde Linux-systemen op één host uit te voeren.

Deze instructies leiden u door de basisstappen van de serverconfiguratie voor geïsoleerde Linux-containershosting. We zullen de volgende functies configureren:

  • LXC-containers met Ubuntu 14.
  • Linux-netwerkinstellingen en poortdoorschakeling voor containers.
  • SSH-doorsturen voor containerbeheer zo eenvoudig als ssh [email protected]enssh [email protected]
  • Nginx-proxyconfiguratie voor toegang tot websites in containers (op hostnaam).
  • Extra beveiligingsverbeteringen voor correct serverbeheer.

Deze gids gaat ervan uit dat:

  • Je hebt een account op Vultr.com .
  • Je weet hoe je een virtuele machine configureert met een aangepaste ISO.
  • U weet hoe u SSH-sleutels moet gebruiken en u hebt al openbare en privésleutels gegenereerd.

Aan het einde van de tutorial krijgen we twee virtuele containers die toegang hebben tot internet, maar die elkaar niet kunnen pingen. We zullen ook port forwarding configureren van example.comnaar containers. We zullen een beveiligd configuratie- en beheerpaneel inzetten met behulp van tools uit het Proxmox-pakket.

Voorbereidende werkzaamheden

We zullen Proxmox alleen gebruiken voor het beheer van LXC-containers. Over het algemeen ondersteunt het ook KVM, maar geneste virtualisatie is verboden op Vultr. Voordat u begint, moet een Proxmox ISO worden gedownload van de officiële website. We zullen de gebruiken Proxmox VE 5.0 ISO Installer. Installeer het besturingssysteem vanaf de afbeelding met standaardinstellingen en start de virtuele machine opnieuw op. U kunt proxmox ook handmatig installeren vanuit bronnen, maar dat is in de meeste gevallen niet nodig (volg de instructies hier ).

OS-instellingen

Maak verbinding met uw host via SSH, werk de lijst met proxmox-sjablonen bij en download een geschikte sjabloon voor containers.

apt-get update
pveam update
pveam available
pveam download local ubuntu-14.04-standard_14.04-1_amd64.tar.gz

Nu moeten we een linux-container maken met een netwerkinterface die is verbonden met een linux-bridge. Open /etc/network/interfacesen voeg de volgende regels toe:

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

Nadat het systeem opnieuw is opgestart, kunt u vanuit de Ubuntu 14.04sjabloon een nieuwe container maken.

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

U kunt uw container verifiëren met pct list, start container # 200 met pct start 200en voer de shell in met pct enter 200. U kunt ook netwerkinstellingen en adressen verifiëren met ip addr.

Netwerk

Om een ​​internetverbinding in uw container te bieden, moeten we dit inschakelen NAT. Met het volgende kan verkeer met behulp van NAT-technologie van de container naar internet worden doorgestuurd. De vmbr0brug is aangesloten op de externe interface en de vmbr1brug is aangesloten op de containers.

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

Voer de container in pct enter 200en configureer de webserver erin.

apt-get update
apt-get install nginx
service nginx start
exit

Nu moeten we Nginx op uw server configureren om proxywebsites in containers te plaatsen.

apt-get update
apt-get install nginx

Maak een nieuw configuratiebestand /etc/nginx/sites-available/box200met de volgende inhoud:

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 proxy nu elk HTTP-verzoek server200.example.comvan uw server naar de container met IP 10.100.0.200. Activeer deze configuratie.

ln -s /etc/nginx/sites-available/box200 /etc/nginx/sites-enabled/
service nginx restart

SSH-toegang

Als u gemakkelijke toegang tot sandboxen wilt bieden, moet u SSH-sessies naar de containers doorsturen. Maak hiervoor een nieuwe gebruiker aan op uw basisserver. Vergeet niet een wachtwoord in te voeren, andere parameters zijn niet nodig.

adduser box200
su - box200
ssh-keygen
cat .ssh/id_rsa.pub
exit

Kopieer deze SSH-sleutel en voer de container in om de sleutel toe te voegen.

pct enter 200
mkdir .ssh
nano .ssh/authorized_keys
exit

Voeg op uw server de volgende regel toe aan het .ssh/authorized_keysbestand.

command="ssh [email protected]",no-X11-forwarding,no-agent-forwarding,no-port-forwarding <YOUR SSH KEY>

Vergeet niet <YOUR SSH KEY>om de openbare sleutel van uw huis te wijzigen . Als alternatief kunt u het volgende vanaf de opdrachtregel uitvoeren.

echo 'command="ssh [email protected]",no-X11-forwarding,no-agent-forwarding,no-port-forwarding <YOUR SSH KEY>' >> .ssh/authorized_keys

Vervolgens kunt u met ssh verbinding maken met uw sandbox.

`ssh box200@<your_server_IP>`

Aanvullende instellingen

Het is tijd om verschillende beveiligingsverbeteringen door te voeren. Eerst willen we de standaard SSH-poort wijzigen. Dan willen we onze Proxmox-beheerpagina beschermen met standaard HTTP-authenticatie.

nano /etc/ssh/sshd_config

Uncomment en verander de lijn

#Port 22 

naar

Port 24000 

Start ssh opnieuw op.

service ssh restart

Maak opnieuw verbinding met SSH met de nieuwe poort.

ssh root@<your_IP> -p 24000

Stel een Proxmox-wachtwoord in.

Maak een bestand /etc/default/pveproxy.

ALLOW_FROM="127.0.0.1"
DENY_FROM="all"
POLICY="allow"

Start opnieuw op pveproxyom de wijzigingen door te voeren.

/etc/init.d/pveproxy restart

Configureer nginx (als je het nog niet eerder hebt gedaan).

apt-get install nginx
service nginx restart

Maak een standaardconfiguratie in /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; }
}

Verkrijg een geldig SSL-certificaat en werk uw nginx-configuratie bij. Het kan bijvoorbeeld worden gedaan met behulp van certbox en letsencrypt. Klik hier voor meer informatie .

wget https://dl.eff.org/certbot-auto
chmod +x certbot-auto
./certbot-auto --nginx

Nu zou uw nginx-configuratie er zo uit moeten zien (of u kunt deze daarna handmatig wijzigen). Vergeet niet om ssl, auth en locatielijnen te verwijderen.

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
}

Maak een /etc/htpasswdbestand met de Htpasswd-generator .

nano /etc/nginx/htpasswd

Start Nginx opnieuw op

service nginx restart

U kunt nu de beheerconsole bekijken https://example.comna basisverificatie.

Port forwarding

De containers zijn nu beschikbaar via HTTP-verzoeken en SSH. Nu kunnen we port forwarding van de externe server naar de containers configureren. Bijvoorbeeld voor toewijzing example.com:8080om 10.100.0.200:3000het volgende in te voeren.

iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 8080 -j DNAT --to 10.100.0.200:3000

U kunt de huidige regels bekijken.

`iptables -t nat -v -L PREROUTING -n --line-number`

U kunt ook een regel op nummer verwijderen met het volgende.

`iptables -t nat -D PREROUTING <#>`.

Gescheiden containers

We hebben nu toegang tot de ene container vanuit een andere.

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

Als u de toegang van container 250 tot 200 wilt beperken, moet u elke container verbinden met een persoonlijke brug en het doorsturen tussen bruggen uitschakelen.

  1. Verwijder bestaande containers.

    pct stop 200
    pct stop 250
    pct destroy 200
    pct destroy 250
    
  2. Wijzig de inhoud van /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
    
  3. reboot het systeem

  4. Doorsturen inschakelen

    `sysctl -w net.ipv4.ip_forward=1`
    

    Om deze wijzigingen permanent te maken, kunt u het /etc/sysctl.confbestand bewerken en de volgende tekst vinden.

    #net.ipv4.ip_forward=1
    

    Geef commentaar.

    net.ipv4.ip_forward=1
    

    U kunt ook hardlopen sysctl -pom de wijzigingen onmiddellijk door te voeren.

  5. Maak containers.

    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
    
  6. Start de containers met pct start 200en pct start 250.

  7. Spoel de iptablesregels.

    iptables -F
    
  8. NAT inschakelen.

    iptables --table nat --append POSTROUTING --out-interface vmbr0 -j MASQUERADE
    

    vmbr0 is de brug met externe interface.

  9. Doorsturen vanuit de externe interface toestaan.

    iptables --append FORWARD --in-interface vmbr0 -j ACCEPT
    
  10. Doorsturen van de containers naar internet toestaan.

    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
    
  11. Laat de andere doorschakeling vallen.

    iptables -A FORWARD -i vmbr1 -j DROP
    iptables -A FORWARD -i vmbr2 -j DROP
    

Controleer nu of dat wel 10.100.1.200kan pingen 8.8.8.8maar niet kan pingen 10.100.2.250en dat 10.100.2.250kan wel pingen 8.8.8.8maar niet pingen 10.100.1.200.

De volgorde van opdrachten met betrekking tot iptables is belangrijk. De beste manier om uw regels te gebruiken, is door te gebruiken iptables-persistent. Dit pakket helpt u om iptables regels om de bestanden op te slaan /etc/iptables/rules.v4en /etc/iptables/rules.v6en het kan ze automatisch laden na het systeem opnieuw op te starten. Installeer het gewoon met het volgende.

apt-get install iptables-persistent

Selecteer YESwanneer daarom wordt gevraagd.



Installeer Rancher Server op RancherOS

Installeer Rancher Server op RancherOS

Overzicht RancherOS is een ongelooflijk lichtgewicht besturingssysteem (slechts ongeveer 60 MB) dat een systeem Docker-daemon draait als PID 0 voor het uitvoeren van systeemservices

Harbor installeren op CentOS 7

Harbor installeren op CentOS 7

Harbor is een open-source registerserver van ondernemingsklasse die Docker-images opslaat en distribueert. Harbor breidt de open source Docker Distribution uit b

Docker installeren op Ubuntu 14.04

Docker installeren op Ubuntu 14.04

Gebruikt u een ander systeem? Docker is een applicatie waarmee programmas kunnen worden geïmplementeerd die als containers worden uitgevoerd. Het is geschreven in het populaire Go-programma

Implementeer een Node.js-applicatie met Docker

Implementeer een Node.js-applicatie met Docker

Dit artikel laat zien hoe u uw Node-toepassing kunt implementeren in een Docker-container. Opmerking: in deze zelfstudie wordt ervan uitgegaan dat Docker is geïnstalleerd en gelezen

Installeer Rancher op Ubuntu 16.04

Installeer Rancher op Ubuntu 16.04

Gebruikt u een ander systeem? Introductie Rancher is een open source platform voor het draaien van containers en het bouwen van een eigen containerservice. Rancher is basis

Implementeer Kubernetes met Kubeadm op CentOS 7

Implementeer Kubernetes met Kubeadm op CentOS 7

Overzicht Dit artikel is bedoeld om u te helpen in een mum van tijd een Kubernetes-cluster aan de praat te krijgen met kubeadm. In deze handleiding worden twee servers geïmplementeerd

Docker-compose installeren op CoreOS

Docker-compose installeren op CoreOS

In dit artikel wordt uitgelegd hoe u docker-compose installeert op CoreOS. In CoreOS is de map / usr / onveranderlijk, dus het standaard / usr / local / bin-pad is niet beschikbaar voor

Installeer Docker CE op Ubuntu 18.04

Installeer Docker CE op Ubuntu 18.04

Inleiding Docker is een applicatie waarmee we programmas kunnen implementeren die als containers worden uitgevoerd. Het is geschreven in de populaire programmeertaal Go

Docker installeren op CentOS 7

Docker installeren op CentOS 7

Gebruikt u een ander systeem? Docker is een applicatie waarmee software kan worden geïmplementeerd in virtuele containers. Het is geschreven in het Go-programma

Aan de slag met Kubernetes op CentOS 7

Aan de slag met Kubernetes op CentOS 7

Kubernetes is een open-sourceplatform dat is ontwikkeld door Google voor het beheren van container-apps op een cluster van servers. Het bouwt voort op een decennium en

Stel Sentry in via Docker op Ubuntu 16.04

Stel Sentry in via Docker op Ubuntu 16.04

Gebruikt u een ander systeem? Introductie Sentry is een open source-oplossing voor het volgen van fouten. Sentry houdt uitzonderingen en andere nuttige berichten bij

Sticky Session With Docker Swarm (CE) op Debian 9

Sticky Session With Docker Swarm (CE) op Debian 9

Gebruikt u een ander systeem? Inleiding Docker Swarm verandert uw individuele servers in een cluster van computers; het vergemakkelijken van schaalvergroting, hoge beschikbaarheid en

Hoe Docker te gebruiken: uw eerste Docker-container maken

Hoe Docker te gebruiken: uw eerste Docker-container maken

Deze tutorial legt de basisprincipes van het starten met Docker uit. Ik neem aan dat Docker al is geïnstalleerd. Stappen in deze tutorial werken op een

Load Balance met Docker

Load Balance met Docker

Wanneer u een webtoepassing uitvoert, wilt u normaal gesproken het meeste uit uw bronnen halen zonder dat u uw software hoeft te converteren om multithreading o te gebruiken

Docker CE installeren op CentOS 7

Docker CE installeren op CentOS 7

Dankzij Docker-containertechnologie kunt u applicaties uitvoeren in een specifieke en geïsoleerde omgeving. Docker Community Edition (CE) is de nieuwe naam voor de fre

Maak een Docker Swarm op Alpine Linux 3.9.0

Maak een Docker Swarm op Alpine Linux 3.9.0

Inleiding In deze handleiding wordt uitgelegd hoe u een Docker-zwerm maakt en configureert met behulp van meerdere Alpine Linux 3.9.0-servers en Portainer. Houd er rekening mee dat

Stel op CoreOS uw eigen Docker-register in

Stel op CoreOS uw eigen Docker-register in

We kennen en houden allemaal van Docker, een platform voor het maken, beheren en distribueren van applicatiecontainers over meerdere machines. Docker Inc. biedt een service t

Ga aan de slag met SQL Server 2017 (MS-SQL) op CentOS 7 met Docker

Ga aan de slag met SQL Server 2017 (MS-SQL) op CentOS 7 met Docker

Vereisten Docker-engine 1.8+. Minimaal 4 GB schijfruimte. Minimaal 4 GB RAM. Stap 1. Docker installeren Om SQL-Server te installeren, Docker mus

Docker CE installeren op Debian 9

Docker CE installeren op Debian 9

Gebruikt u een ander systeem? Inleiding Docker is een applicatie waarmee software kan worden geïmplementeerd in virtuele containers. Het stond in de G

Kan AI vechten met toenemend aantal ransomware-aanvallen?

Kan AI vechten met toenemend aantal ransomware-aanvallen?

Ransomware-aanvallen nemen toe, maar kan AI helpen het nieuwste computervirus het hoofd te bieden? Is AI het antwoord? Lees hier weten is AI boezem of vloek

ReactOS: is dit de toekomst van Windows?

ReactOS: is dit de toekomst van Windows?

ReactOS, een open source en gratis besturingssysteem is hier met de nieuwste versie. Kan het voldoen aan de behoeften van moderne Windows-gebruikers en Microsoft uitschakelen? Laten we meer te weten komen over deze oude stijl, maar een nieuwere OS-ervaring.

Blijf verbonden via WhatsApp Desktop-app 24 * 7

Blijf verbonden via WhatsApp Desktop-app 24 * 7

WhatsApp heeft eindelijk de Desktop-app voor Mac- en Windows-gebruikers gelanceerd. Nu heb je eenvoudig toegang tot WhatsApp vanuit Windows of Mac. Beschikbaar voor Windows 8+ en Mac OS 10.9+

Hoe AI procesautomatisering naar een hoger niveau kan tillen?

Hoe AI procesautomatisering naar een hoger niveau kan tillen?

Lees dit om te weten hoe kunstmatige intelligentie populair wordt onder de kleinschalige bedrijven en hoe het de kansen vergroot om ze te laten groeien en hun concurrenten voorsprong te geven.

macOS Catalina 10.15.4 Supplement Update veroorzaakt meer problemen dan het oplost

macOS Catalina 10.15.4 Supplement Update veroorzaakt meer problemen dan het oplost

Onlangs heeft Apple macOS Catalina 10.15.4 uitgebracht, een aanvullende update om problemen op te lossen, maar het lijkt erop dat de update meer problemen veroorzaakt die ertoe leiden dat mac-machines worden gemetseld. Lees dit artikel voor meer informatie

13 Commerciële data-extractietools voor big data

13 Commerciële data-extractietools voor big data

13 Commerciële data-extractietools voor big data

Wat is een logboekbestandssysteem en hoe werkt het?

Wat is een logboekbestandssysteem en hoe werkt het?

Onze computer slaat alle gegevens op een georganiseerde manier op, het zogenaamde Journaling-bestandssysteem. Het is een efficiënte methode waarmee de computer bestanden kan zoeken en weergeven zodra u op zoeken drukt.https://wethegeek.com/?p=94116&preview=true

Technologische singulariteit: een verre toekomst van de menselijke beschaving?

Technologische singulariteit: een verre toekomst van de menselijke beschaving?

Naarmate de wetenschap zich snel ontwikkelt en veel van onze inspanningen overneemt, nemen ook de risico's toe om onszelf te onderwerpen aan een onverklaarbare singulariteit. Lees, wat singulariteit voor ons kan betekenen.

Een inzicht in 26 Big Data-analysetechnieken: deel 1

Een inzicht in 26 Big Data-analysetechnieken: deel 1

Een inzicht in 26 Big Data-analysetechnieken: deel 1

De impact van kunstmatige intelligentie in de gezondheidszorg 2021

De impact van kunstmatige intelligentie in de gezondheidszorg 2021

AI in de zorg heeft de afgelopen decennia grote sprongen gemaakt. De toekomst van AI in de gezondheidszorg groeit dus nog steeds met de dag.