Distribuisci e gestisci in modo sicuro i contenitori LXC su Ubuntu 14.04

I contenitori LXC (contenitori Linux) sono una funzionalità del sistema operativo in Linux che può essere utilizzata per eseguire più sistemi Linux isolati su un singolo host.

Queste istruzioni ti guideranno attraverso i passaggi di base della configurazione del server per l'hosting di contenitori Linux isolati. Configureremo le seguenti funzionalità:

  • Contenitori LXC con Ubuntu 14.
  • Impostazioni di rete Linux e port forwarding per container.
  • Inoltro SSH per l'amministrazione dei container semplice come ssh [email protected]essh [email protected]
  • Configurazione proxy Nginx per l'accesso ai siti Web all'interno dei contenitori (per nome host).
  • Ulteriori miglioramenti della sicurezza per una corretta gestione del server.

Questa guida presuppone che:

  • Hai un account su Vultr.com .
  • Sai come configurare una macchina virtuale con un ISO personalizzato.
  • Sai come usare le chiavi SSH e hai già generato chiavi pubbliche e private.

Alla fine del tutorial avremo due container virtuali che avranno accesso a Internet, ma non possono fare il ping a vicenda. Configureremo anche il port forwarding dai example.comcontainer. Distribuiremo un pannello di configurazione e gestione sicuro con l'aiuto degli strumenti del pacchetto Proxmox.

preparativi

Utilizzeremo Proxmox solo per la gestione dei contenitori LXC. In generale, supporta anche KVM, ma la virtualizzazione nidificata è vietata su Vultr. Prima di iniziare, è necessario scaricare un ISO Proxmox dal sito Web ufficiale. Useremo il Proxmox VE 5.0 ISO Installer. Installa il sistema operativo dall'immagine con le impostazioni predefinite e riavvia la macchina virtuale. Inoltre, è possibile installare manualmente proxmox dai sorgenti, ma ciò non è necessario nella maggior parte dei casi (seguire le istruzioni qui ).

Configurazione del sistema operativo

Connettiti al tuo host tramite SSH, aggiorna l'elenco dei modelli proxmox e scarica un modello adatto per i contenitori.

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

Ora, abbiamo bisogno di creare un contenitore Linux con interfaccia di rete collegata a un bridge Linux. Apri /etc/network/interfacese aggiungi le seguenti righe:

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

Dopo il riavvio del sistema, è possibile creare un nuovo contenitore dal Ubuntu 14.04modello.

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

Puoi verificare il tuo contenitore usando pct list, avviare il contenitore # 200 con pct start 200ed inserire la sua shell con pct enter 200. Puoi anche verificare le impostazioni e gli indirizzi di rete con ip addr.

Rete

Per fornire una connessione Internet all'interno del tuo contenitore, dobbiamo abilitare NAT. Quanto segue consentirà di inoltrare il traffico dal container a Internet con l'aiuto della tecnologia NAT. Il vmbr0ponte è collegato all'interfaccia esterna e il vmbr1ponte è collegato ai contenitori.

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

Immettere il contenitore con pct enter 200e configurare il server Web all'interno.

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

Ora, abbiamo bisogno di configurare Nginx sul tuo server per proxy siti Web in contenitori.

apt-get update
apt-get install nginx

Crea un nuovo file di configurazione /etc/nginx/sites-available/box200con il seguente contenuto:

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 eseguirà ora il proxy di ogni richiesta HTTP server200.example.comdal server al contenitore con IP 10.100.0.200. Attiva questa configurazione.

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

Accesso SSH

Se si desidera fornire un facile accesso ai sandbox, è necessario inoltrare le sessioni SSH nei contenitori. Per fare ciò, crea un nuovo utente sul tuo server principale. Non dimenticare di inserire una password, non sono necessari altri parametri.

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

Copia questa chiave SSH e inserisci il contenitore per aggiungere la chiave.

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

Sul tuo server, aggiungi la seguente riga al .ssh/authorized_keysfile.

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

Non dimenticare di cambiare <YOUR SSH KEY>la chiave pubblica di casa. In alternativa, è possibile eseguire quanto segue dalla riga di comando.

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

Quindi, puoi connetterti al tuo sandbox con ssh.

`ssh box200@<your_server_IP>`

Altre impostazioni

È tempo di implementare numerosi miglioramenti della sicurezza. Innanzitutto, vogliamo cambiare la porta SSH predefinita. Quindi vogliamo proteggere la nostra pagina di gestione Proxmox con l'autenticazione HTTP di base.

nano /etc/ssh/sshd_config

Rimuovi il commento e cambia la linea

#Port 22 

per

Port 24000 

Riavvia ssh.

service ssh restart

Riconnetti a ssh con la nuova porta.

ssh root@<your_IP> -p 24000

Imposta una password Proxmox.

Crea file /etc/default/pveproxy.

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

Riavvia pveproxyper rendere effettive le modifiche.

/etc/init.d/pveproxy restart

Configura nginx (se non l'hai mai fatto prima).

apt-get install nginx
service nginx restart

Crea una configurazione predefinita 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; }
}

Ottieni un certificato SSL valido e aggiorna la tua configurazione nginx. Ad esempio, può essere fatto con l'aiuto di certbox e letsencrypt. Per maggiori informazioni, clicca qui .

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

Ora, la tua configurazione nginx dovrebbe assomigliare a questa (o puoi cambiarla manualmente dopo). Non dimenticare di decommentare le linee ssl, auth e 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
}

Crea un /etc/htpasswdfile usando il generatore Htpasswd .

nano /etc/nginx/htpasswd

Riavvia Nginx

service nginx restart

Ora è possibile visualizzare la console di gestione https://example.comdopo l'autenticazione di base.

Port forwarding

I contenitori sono ora disponibili per richieste HTTP e SSH. Ora possiamo configurare il port forwarding dal server esterno ai container. Ad esempio, per la mappatura example.com:8080di 10.100.0.200:3000ingresso seguente.

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

Puoi visualizzare le regole attuali.

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

Puoi anche cancellare una regola per numero con il seguente.

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

Contenitori separati

Ora possiamo accedere a un contenitore da un altro.

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

Se si desidera limitare l'accesso dal container da 250 a 200, è necessario connettere ciascun container a un bridge personale e disabilitare l'inoltro tra i bridge.

  1. Elimina i contenitori esistenti.

    pct stop 200
    pct stop 250
    pct destroy 200
    pct destroy 250
    
  2. Cambia il contenuto di /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 il sistema

  4. Abilita inoltro

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

    Per rendere permanenti queste modifiche, è possibile modificare il /etc/sysctl.conffile e trovare il testo seguente.

    #net.ipv4.ip_forward=1
    

    Rilascialo.

    net.ipv4.ip_forward=1
    

    Puoi anche eseguire sysctl -pper rendere immediatamente effettive le modifiche.

  5. Crea contenitori.

    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. Inizia i contenitori con pct start 200e pct start 250.

  7. Svuota le iptablesregole.

    iptables -F
    
  8. Abilita NAT.

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

    vmbr0 è il bridge che include l'interfaccia esterna.

  9. Consenti inoltro dall'interfaccia esterna.

    iptables --append FORWARD --in-interface vmbr0 -j ACCEPT
    
  10. Consenti l'inoltro dai contenitori a 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. Rilascia l'altro inoltro.

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

Ora, controlla che 10.100.1.200può eseguire il ping 8.8.8.8ma che non può eseguire il ping 10.100.2.250e che 10.100.2.250può eseguire il ping 8.8.8.8ma non può eseguire il ping 10.100.1.200.

L'ordine dei comandi relativi a iptables è importante. Il modo migliore per gestire le tue regole è usare iptables-persistent. Questo pacchetto ti aiuta a salvare le regole di iptables nei file /etc/iptables/rules.v4e /etc/iptables/rules.v6può caricarle automaticamente dopo il riavvio del sistema. Basta installarlo con il seguente.

apt-get install iptables-persistent

Selezionare YESquando richiesto.



Leave a Comment

Installa Sentry tramite Docker su Ubuntu 16.04

Installa Sentry tramite Docker su Ubuntu 16.04

Usi un sistema diverso? Introduzione Sentry è una soluzione open source per il monitoraggio degli errori. Sentry tiene traccia delle eccezioni e di altri messaggi utili

Installa Rancher Server su RancherOS

Installa Rancher Server su RancherOS

Panoramica RancherOS è un sistema operativo incredibilmente leggero (solo circa 60 MB) che esegue un demone Docker di sistema come PID 0 per lesecuzione dei servizi di sistema

Come installare Harbor su CentOS 7

Come installare Harbor su CentOS 7

Harbour è un server di registro open source di classe enterprise che archivia e distribuisce immagini Docker. Harbour estende la distribuzione Docker open source b

Crea uno sciame Docker su Alpine Linux 3.9.0

Crea uno sciame Docker su Alpine Linux 3.9.0

Introduzione Questa guida ti mostrerà come creare e configurare uno sciame Docker utilizzando più server Alpine Linux 3.9.0 e Portainer. Si prega di essere consapevoli di ciò

Installazione di Docker su Ubuntu 14.04

Installazione di Docker su Ubuntu 14.04

Usando un sistema diverso? Docker è unapplicazione che consente di distribuire programmi eseguiti come contenitori. È stato scritto nel popolare programma Go

Distribuire unapplicazione Node.js mediante Docker

Distribuire unapplicazione Node.js mediante Docker

Questo articolo mostra come distribuire lapplicazione Node in un contenitore Docker. Nota: in questa esercitazione si presuppone che Docker sia installato e letto

Installa Rancher su Ubuntu 16.04

Installa Rancher su Ubuntu 16.04

Usi un sistema diverso? Introduzione Rancher è una piattaforma open source per lesecuzione di container e la creazione di un servizio di container privato. Rancher è base

Distribuisci Kubernetes con Kubeadm su CentOS 7

Distribuisci Kubernetes con Kubeadm su CentOS 7

Panoramica Questo articolo ha lo scopo di aiutarti a far funzionare un cluster Kubernetes con kubeadm in pochissimo tempo. Questa guida distribuirà due server, su

Installazione docker-compose su CoreOS

Installazione docker-compose su CoreOS

Questo articolo spiega come installare docker-compose su CoreOS. In CoreOS, la cartella / usr / è immutabile, quindi il percorso standard / usr / local / bin non è disponibile per

Installa Docker CE su Ubuntu 18.04

Installa Docker CE su Ubuntu 18.04

Introduzione Docker è unapplicazione che ci consente di distribuire programmi eseguiti come contenitori. È stato scritto nel popolare linguaggio di programmazione Go

Introduzione a Kubernetes su CentOS 7

Introduzione a Kubernetes su CentOS 7

Kubernetes è una piattaforma open source sviluppata da Google per la gestione di applicazioni containerizzate in un cluster di server. Si basa su un decennio e

Sessione adesiva con Docker Swarm (CE) su Debian 9

Sessione adesiva con Docker Swarm (CE) su Debian 9

Usi un sistema diverso? Introduzione Docker Swarm trasforma i singoli server in un cluster di computer; facilitazione del ridimensionamento, alta disponibilità an

Come utilizzare Docker: creazione del primo contenitore Docker

Come utilizzare Docker: creazione del primo contenitore Docker

Questo tutorial spiega le basi per iniziare con Docker. Presumo che tu abbia già installato Docker. I passaggi di questo tutorial funzioneranno su un

Bilanciamento del carico con Docker

Bilanciamento del carico con Docker

Quando si esegue unapplicazione Web, in genere si desidera ottenere il massimo dalle proprie risorse senza dover convertire il software per utilizzare il multithreading o

Installazione di Docker CE su CentOS 7

Installazione di Docker CE su CentOS 7

La tecnologia del contenitore Docker consente di eseguire applicazioni in un ambiente specifico e isolato. Docker Community Edition (CE) è il nuovo nome per il fre

Su CoreOS, imposta il tuo registro Docker

Su CoreOS, imposta il tuo registro Docker

Conosciamo e amiamo tutti Docker, una piattaforma per creare, gestire e distribuire contenitori di applicazioni su più macchine. Docker Inc. fornisce un servizio t

Inizia con SQL Server 2017 (MS-SQL) su CentOS 7 con Docker

Inizia con SQL Server 2017 (MS-SQL) su CentOS 7 con Docker

Prerequisiti Docker engine 1.8+. Minimo 4 GB di spazio su disco. Minimo 4 GB di RAM. Passaggio 1. Installa Docker Per installare SQL-Server, Docker mus

Installazione di Docker CE su Debian 9

Installazione di Docker CE su Debian 9

Usi un sistema diverso? Introduzione Docker è unapplicazione che consente la distribuzione di software allinterno di contenitori virtuali. È stato scritto nel G

Installa Rancher su CentOS 7

Installa Rancher su CentOS 7

Usi un sistema diverso? Introduzione Rancher è una piattaforma open source per lesecuzione di container e la creazione di un servizio di container privato. Rancher è base

Lintelligenza artificiale può combattere con un numero crescente di attacchi ransomware?

Lintelligenza artificiale può combattere con un numero crescente di attacchi ransomware?

Gli attacchi ransomware sono in aumento, ma l'intelligenza artificiale può aiutare ad affrontare l'ultimo virus informatico? L'intelligenza artificiale è la risposta? Leggi qui sai è AI boone o bane

ReactOS: è questo il futuro di Windows?

ReactOS: è questo il futuro di Windows?

ReactOS, un sistema operativo open source e gratuito è qui con l'ultima versione. Può essere sufficiente alle esigenze degli utenti Windows moderni e abbattere Microsoft? Scopriamo di più su questo vecchio stile, ma un'esperienza del sistema operativo più recente.

Rimani connesso tramite lapp desktop WhatsApp 24*7

Rimani connesso tramite lapp desktop WhatsApp 24*7

Whatsapp ha finalmente lanciato l'app desktop per utenti Mac e Windows. Ora puoi accedere facilmente a Whatsapp da Windows o Mac. Disponibile per Windows 8+ e Mac OS 10.9+

In che modo lintelligenza artificiale può portare lautomazione dei processi al livello successivo?

In che modo lintelligenza artificiale può portare lautomazione dei processi al livello successivo?

Leggi questo per sapere come l'intelligenza artificiale sta diventando popolare tra le aziende di piccole dimensioni e come sta aumentando le probabilità di farle crescere e dare un vantaggio ai loro concorrenti.

Laggiornamento del supplemento macOS Catalina 10.15.4 sta causando più problemi che risolverli

Laggiornamento del supplemento macOS Catalina 10.15.4 sta causando più problemi che risolverli

Recentemente Apple ha rilasciato macOS Catalina 10.15.4 un aggiornamento supplementare per risolvere i problemi, ma sembra che l'aggiornamento stia causando più problemi che portano al bricking delle macchine mac. Leggi questo articolo per saperne di più

13 strumenti commerciali per lestrazione dei dati dai Big Data

13 strumenti commerciali per lestrazione dei dati dai Big Data

13 strumenti commerciali per l'estrazione dei dati dai Big Data

Che cosè un file system di journaling e come funziona?

Che cosè un file system di journaling e come funziona?

Il nostro computer memorizza tutti i dati in un modo organizzato noto come file system di journaling. È un metodo efficiente che consente al computer di cercare e visualizzare i file non appena si preme search.https://wethegeek.com/?p=94116&preview=true

Singolarità tecnologica: un lontano futuro della civiltà umana?

Singolarità tecnologica: un lontano futuro della civiltà umana?

Man mano che la scienza si evolve a un ritmo rapido, assumendo gran parte dei nostri sforzi, aumentano anche i rischi di sottoporci a una singolarità inspiegabile. Leggi, cosa potrebbe significare per noi la singolarità.

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Limpatto dellintelligenza artificiale nella sanità 2021

Limpatto dellintelligenza artificiale nella sanità 2021

L'intelligenza artificiale nell'assistenza sanitaria ha compiuto grandi passi avanti negli ultimi decenni. Pertanto, il futuro dell'IA in sanità continua a crescere giorno dopo giorno.