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.



Leave a Comment

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.