Bezpečně nasazujte a spravujte kontejnery LXC na Ubuntu 14.04

Kontejnery LXC (kontejnery Linux) jsou funkcí operačního systému v Linuxu, kterou lze použít ke spuštění více izolovaných systémů Linux na jednom hostiteli.

Tyto pokyny vás provedou základními kroky konfigurace serveru pro izolovaný hosting linuxových kontejnerů. Nakonfigurujeme následující funkce:

  • Kontejnery LXC s Ubuntu 14.
  • Nastavení sítě Linux a přesměrování portů pro kontejnery.
  • SSH forwarding pro správu kontejnerů stejně jednoduchý jako ssh box1@example.comassh box2@example.com
  • Konfigurace proxy Nginx pro přístup k webovým stránkám uvnitř kontejnerů (podle názvu hostitele).
  • Další vylepšení zabezpečení pro správnou správu serveru.

Tato příručka předpokládá, že:

  • Máte účet na Vultr.com .
  • Víte, jak nakonfigurovat virtuální počítač s vlastním ISO.
  • Víte, jak používat SSH klíče a máte již vygenerované veřejné a soukromé klíče.

Na konci tutoriálu získáme dva virtuální kontejnery, které budou mít přístup k internetu, ale nemohou si navzájem pingnout. Nakonfigurujeme také přesměrování portů z example.comdo kontejnerů. Nasadíme bezpečný konfigurační a řídící panel pomocí nástrojů z Proxmox packetu.

Přípravky

Proxmox budeme používat pouze pro správu kontejnerů LXC. Obecně také podporuje KVM, ale vnořená virtualizace je na Vultr zakázána. Před zahájením je třeba stáhnout Proxmox ISO z oficiálních stránek. Budeme používat Proxmox VE 5.0 ISO Installer. Nainstalujte OS z bitové kopie s výchozím nastavením a restartujte virtuální počítač. Proxmox můžete také nainstalovat ručně ze zdrojů, ale to ve většině případů není nutné (postupujte podle pokynů zde ).

Nastavení OS

Připojte se k hostiteli pomocí SSH, aktualizujte seznam šablon proxmox a stáhněte si vhodnou šablonu pro kontejnery.

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

Nyní musíme vytvořit linuxový kontejner se síťovým rozhraním připojeným k linuxovému mostu. Otevřete /etc/network/interfacesa připojte následující řádky:

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

Po restartu systému můžete ze Ubuntu 14.04šablony vytvořit nový kontejner .

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

Svůj kontejner můžete ověřit pomocí pct list, spustit kontejner #200 pomocí pct start 200a zadat jeho shell pomocí pct enter 200. Síťová nastavení a adresy můžete také ověřit pomocí ip addr.

Síť

Aby bylo možné ve vašem kontejneru poskytovat internetové připojení, musíme povolit NAT. Následující umožní přesměrovat provoz z kontejneru na internet pomocí technologie NAT. vmbr0Můstek je připojen k externí rozhraní a vmbr1můstek je spojen s kontejnery.

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

Zadejte kontejner s pct enter 200a nakonfigurujte webový server uvnitř.

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

Nyní musíme nakonfigurovat Nginx na vašem serveru pro proxy weby do kontejnerů.

apt-get update
apt-get install nginx

Vytvořte nový konfigurační soubor /etc/nginx/sites-available/box200s následujícím obsahem:

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 nyní bude proxy každý požadavek HTTP pro server200.example.comz vašeho serveru do kontejneru s IP 10.100.0.200. Aktivujte tuto konfiguraci.

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

Přístup SSH

Pokud chcete poskytnout snadný přístup k sandboxům, musíte relace SSH přeposílat do kontejnerů. Chcete-li tak učinit, vytvořte nového uživatele na kořenovém serveru. Nezapomeňte zadat heslo, další parametry nejsou nutné.

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

Zkopírujte tento klíč SSH a zadejte kontejner pro připojení klíče.

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

Na serveru přidejte do .ssh/authorized_keyssouboru následující řádek .

command="ssh root@10.100.0.200",no-X11-forwarding,no-agent-forwarding,no-port-forwarding <YOUR SSH KEY>

Nezapomeňte změnit <YOUR SSH KEY>svůj domácí veřejný klíč. Případně můžete z příkazového řádku spustit následující.

echo 'command="ssh root@10.100.0.200",no-X11-forwarding,no-agent-forwarding,no-port-forwarding <YOUR SSH KEY>' >> .ssh/authorized_keys

Poté se můžete připojit ke svému sandboxu pomocí ssh.

`ssh box200@<your_server_IP>`

Další nastavení

Nastal čas implementovat několik vylepšení zabezpečení. Nejprve chceme změnit výchozí port SSH. Potom chceme chránit naši stránku pro správu Proxmox pomocí základní HTTP autentizace.

nano /etc/ssh/sshd_config

Odkomentujte a změňte řádek

#Port 22 

na

Port 24000 

Restartujte ssh.

service ssh restart

Znovu se připojte k ssh s novým portem.

ssh root@<your_IP> -p 24000

Nastavte heslo Proxmox.

Vytvořit soubor /etc/default/pveproxy.

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

Restartujte, pveproxyaby se změny projevily.

/etc/init.d/pveproxy restart

Nakonfigurujte nginx (pokud jste to ještě neudělali).

apt-get install nginx
service nginx restart

Vytvořte výchozí konfiguraci v /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; }
}

Získejte platný certifikát SSL a aktualizujte svou konfiguraci nginx. Lze to například provést pomocí certbox a letsencrypt. Pro více informací klikněte zde .

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

Nyní by vaše konfigurace nginx měla vypadat takto (nebo ji můžete později změnit ručně). Nezapomeňte odkomentovat řádky ssl, auth a location.

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
}

Vytvořte /etc/htpasswdsoubor pomocí generátoru Htpasswd .

nano /etc/nginx/htpasswd

Restartujte Nginx

service nginx restart

Nyní můžete https://example.compo základním ověření zobrazit konzolu pro správu .

Přesměrování portů

Kontejnery jsou nyní dostupné prostřednictvím požadavků HTTP a SSH. Nyní můžeme nakonfigurovat předávání portů z externího serveru do kontejnerů. Například, pro mapování example.com:8080na 10.100.0.200:3000vstup následujícího.

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

Můžete si prohlédnout aktuální pravidla.

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

Pravidlo můžete také odstranit podle čísla pomocí následujícího.

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

Oddělené nádoby

Nyní můžeme přistupovat k jednomu kontejneru z druhého.

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

Pokud chcete omezit přístup z kontejneru 250 na 200, musíte každý kontejner připojit k osobnímu mostu a zakázat předávání mezi mosty.

  1. Smazat stávající kontejnery.

    pct stop 200
    pct stop 250
    pct destroy 200
    pct destroy 250
    
  2. Změňte obsah /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 systém

  4. Povolit přeposílání

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

    Aby byly tyto změny trvalé, můžete /etc/sysctl.confsoubor upravit a najít následující text.

    #net.ipv4.ip_forward=1
    

    Odkomentujte to.

    net.ipv4.ip_forward=1
    

    Můžete také spustit sysctl -p, aby se změny projevily okamžitě.

  5. Vytvořte kontejnery.

    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. Spusťte kontejnery pomocí pct start 200a pct start 250.

  7. Propláchněte iptablespravidla.

    iptables -F
    
  8. Povolit NAT.

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

    vmbr0 je most, který obsahuje externí rozhraní.

  9. Povolit přeposílání z externího rozhraní.

    iptables --append FORWARD --in-interface vmbr0 -j ACCEPT
    
  10. Povolit přeposílání z kontejnerů na internet.

    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. Pusťte další přesměrování.

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

Nyní zkontrolujte, že 10.100.1.200může ping, 8.8.8.8ale nemůže ping 10.100.2.250a že 10.100.2.250může ping, 8.8.8.8ale nemůže ping 10.100.1.200.

Důležité je pořadí příkazů souvisejících s iptables. Nejlepší způsob, jak provozovat svá pravidla, je použít iptables-persistent. Tento balíček vám pomůže uložit pravidla iptables do souborů /etc/iptables/rules.v4a /etc/iptables/rules.v6může je automaticky načíst po restartu systému. Stačí jej nainstalovat pomocí následujícího.

apt-get install iptables-persistent

YESPo zobrazení výzvy vyberte .

Kontejnery, Linux Guides, Ubuntu

Zanechat komentář

The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Umělá inteligence není v budoucnosti, je zde přímo v současnosti V tomto blogu si přečtěte, jak aplikace umělé inteligence ovlivnily různé sektory.

Útoky DDOS: Stručný přehled

Útoky DDOS: Stručný přehled

Jste také obětí DDOS útoků a nemáte jasno v metodách prevence? Chcete-li vyřešit své dotazy, přečtěte si tento článek.

Přemýšleli jste někdy, jak hackeři vydělávají peníze?

Přemýšleli jste někdy, jak hackeři vydělávají peníze?

Možná jste slyšeli, že hackeři vydělávají spoustu peněz, ale napadlo vás někdy, jak takové peníze vydělávají? Pojďme diskutovat.

Revoluční vynálezy od Googlu, které vám usnadní život.

Revoluční vynálezy od Googlu, které vám usnadní život.

Chcete vidět revoluční vynálezy Google a jak tyto vynálezy změnily život každého dnešního člověka? Pak si přečtěte na blogu a podívejte se na vynálezy od Googlu.

Friday Essential: Co se stalo s auty řízenými umělou inteligencí?

Friday Essential: Co se stalo s auty řízenými umělou inteligencí?

Koncept aut s vlastním pohonem, která vyrazí na silnice s pomocí umělé inteligence, je snem, který už nějakou dobu máme. Ale přes několik slibů nejsou nikde vidět. Přečtěte si tento blog a dozvíte se více…

Technologická singularita: vzdálená budoucnost lidské civilizace?

Technologická singularita: vzdálená budoucnost lidské civilizace?

Jak se věda vyvíjí rychlým tempem a přebírá mnoho našeho úsilí, stoupá také riziko, že se vystavíme nevysvětlitelné singularitě. Přečtěte si, co pro nás může znamenat singularita.

Funkcionality vrstev referenční architektury velkých dat

Funkcionality vrstev referenční architektury velkých dat

Přečtěte si blog, abyste co nejjednodušším způsobem poznali různé vrstvy v architektuře velkých dat a jejich funkce.

Evoluce ukládání dat – Infografika

Evoluce ukládání dat – Infografika

Způsoby ukládání dat se mohou vyvíjet od narození dat. Tento blog se zabývá vývojem ukládání dat na základě infografiky.

6 úžasných výhod toho, že máme v životě zařízení pro chytrou domácnost

6 úžasných výhod toho, že máme v životě zařízení pro chytrou domácnost

V tomto digitálním světě se chytrá domácí zařízení stala klíčovou součástí života. Zde je několik úžasných výhod chytrých domácích zařízení o tom, jak náš život stojí za to žít a zjednodušit jej.

Aktualizace doplňku macOS Catalina 10.15.4 způsobuje více problémů než řešení

Aktualizace doplňku macOS Catalina 10.15.4 způsobuje více problémů než řešení

Apple nedávno vydal doplňkovou aktualizaci macOS Catalina 10.15.4, která opravuje problémy, ale zdá se, že aktualizace způsobuje další problémy, které vedou k zablokování počítačů mac. Přečtěte si tento článek a dozvíte se více