Déployer et gérer en toute sécurité les conteneurs LXC sur Ubuntu 14.04

Les conteneurs LXC (conteneurs Linux) sont une fonctionnalité du système d'exploitation sous Linux qui peut être utilisée pour exécuter plusieurs systèmes Linux isolés sur un seul hôte.

Ces instructions vous guideront à travers les étapes de base de la configuration du serveur pour l'hébergement de conteneurs Linux isolés. Nous configurerons les fonctionnalités suivantes:

  • Conteneurs LXC avec Ubuntu 14.
  • Paramètres réseau Linux et redirection de port pour les conteneurs.
  • Transfert SSH pour l'administration de conteneurs aussi simple que ssh [email protected]etssh [email protected]
  • Configuration du proxy Nginx pour accéder aux sites Web à l'intérieur des conteneurs (par nom d'hôte).
  • Améliorations de sécurité supplémentaires pour une bonne gestion du serveur.

Ce guide suppose que:

  • Vous avez un compte sur Vultr.com .
  • Vous savez comment configurer une machine virtuelle avec un ISO personnalisé.
  • Vous savez utiliser les clés SSH et vous avez déjà généré des clés publiques et privées.

À la fin du tutoriel, nous aurons deux conteneurs virtuels qui auront accès à Internet, mais ne pourront pas se cingler. Nous configurerons également la redirection de port de example.comvers les conteneurs. Nous déploierons un panneau de configuration et de gestion sécurisé à l'aide d'outils du paquet Proxmox.

Les préparatifs

Nous n'utiliserons Proxmox que pour la gestion des conteneurs LXC. Généralement, il prend également en charge KVM, mais la virtualisation imbriquée est interdite sur Vultr. Avant de commencer, un ISO Proxmox doit être téléchargé sur le site officiel. Nous utiliserons le Proxmox VE 5.0 ISO Installer. Installez le système d'exploitation à partir de l'image avec les paramètres par défaut et redémarrez la machine virtuelle. En outre, vous pouvez installer manuellement proxmox à partir de sources, mais cela n'est pas nécessaire dans la plupart des cas (suivez les instructions ici ).

Configuration du système d'exploitation

Connectez-vous à votre hôte par SSH, mettez à jour la liste des modèles proxmox et téléchargez un modèle approprié pour les conteneurs.

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

Maintenant, nous devons créer un conteneur Linux avec une interface réseau connectée à un pont Linux. Ouvrez /etc/network/interfaceset ajoutez les lignes suivantes:

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

Après le redémarrage du système, vous pouvez créer un nouveau conteneur à partir du Ubuntu 14.04modèle.

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

Vous pouvez vérifier votre conteneur à l'aide de pct list, démarrer le conteneur # 200 avec pct start 200et saisir son shell avec pct enter 200. Vous pouvez également vérifier les paramètres réseau et les adresses avec ip addr.

Réseau

Pour fournir une connexion Internet à l'intérieur de votre conteneur, nous devons l'activer NAT. Les éléments suivants permettront de transférer le trafic du conteneur vers Internet à l'aide de la technologie NAT. Le vmbr0pont est connecté à l'interface externe et le vmbr1pont est connecté aux conteneurs.

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

Entrez dans le conteneur avec pct enter 200et configurez le serveur Web à l'intérieur.

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

Maintenant, nous devons configurer Nginx sur votre serveur pour proxy des sites Web dans des conteneurs.

apt-get update
apt-get install nginx

Créez un nouveau fichier de configuration /etc/nginx/sites-available/box200avec le contenu suivant:

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 va maintenant proxy chaque demande HTTP server200.example.comdepuis votre serveur vers le conteneur avec IP 10.100.0.200. Activez cette configuration.

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

Accès SSH

Si vous souhaitez fournir un accès facile aux sandbox, vous devez transférer les sessions SSH dans les conteneurs. Pour ce faire, créez un nouvel utilisateur sur votre serveur racine. N'oubliez pas de saisir un mot de passe, d'autres paramètres ne sont pas nécessaires.

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

Copiez cette clé SSH et entrez dans le conteneur pour ajouter la clé.

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

Sur votre serveur, ajoutez la ligne suivante au .ssh/authorized_keysfichier.

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

N'oubliez pas de changer <YOUR SSH KEY>la clé publique de votre domicile. Vous pouvez également exécuter ce qui suit à partir de la ligne de commande.

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

Ensuite, vous pouvez vous connecter à votre bac à sable avec ssh.

`ssh box200@<your_server_IP>`

Paramètres additionnels

Il est temps de mettre en œuvre plusieurs améliorations de sécurité. Tout d'abord, nous voulons changer le port SSH par défaut. Ensuite, nous voulons protéger notre page de gestion Proxmox avec une authentification HTTP de base.

nano /etc/ssh/sshd_config

Décommenter et changer de ligne

#Port 22 

à

Port 24000 

Redémarrez ssh.

service ssh restart

Reconnectez-vous à ssh avec le nouveau port.

ssh root@<your_IP> -p 24000

Définissez un mot de passe Proxmox.

Créez un fichier /etc/default/pveproxy.

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

Redémarrez pveproxypour que les modifications prennent effet.

/etc/init.d/pveproxy restart

Configurez nginx (si vous ne l'avez pas encore fait).

apt-get install nginx
service nginx restart

Créez une configuration par défaut dans /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; }
}

Obtenez un certificat SSL valide et mettez à jour votre configuration nginx. Par exemple, cela peut être fait à l'aide de certbox et letsencrypt. Pour plus d'informations, cliquez ici .

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

Maintenant, votre configuration nginx devrait ressembler à ceci (ou vous pouvez la modifier manuellement après). N'oubliez pas de décommenter les lignes ssl, auth et 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
}

Créez un /etc/htpasswdfichier à l'aide du générateur Htpasswd .

nano /etc/nginx/htpasswd

Redémarrez Nginx

service nginx restart

Vous pouvez maintenant afficher la console de gestion sur https://example.comaprès l'authentification de base.

Redirection de port

Les conteneurs sont désormais disponibles par requêtes HTTP et SSH. Maintenant, nous pouvons configurer la redirection de port du serveur externe vers les conteneurs. Par exemple, pour mapper example.com:8080pour 10.100.0.200:3000saisir les éléments suivants.

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

Vous pouvez afficher les règles actuelles.

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

Vous pouvez également supprimer une règle par numéro avec les éléments suivants.

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

Conteneurs séparés

Nous pouvons désormais accéder à un conteneur depuis un autre.

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

Si vous souhaitez restreindre l'accès du conteneur 250 à 200, vous devez connecter chaque conteneur à un pont personnel et désactiver le transfert entre les ponts.

  1. Supprimez les conteneurs existants.

    pct stop 200
    pct stop 250
    pct destroy 200
    pct destroy 250
    
  2. Modifiez le contenu de /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 le système

  4. Activer le transfert

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

    Pour rendre ces modifications permanentes, vous pouvez modifier le /etc/sysctl.conffichier et trouver le texte suivant.

    #net.ipv4.ip_forward=1
    

    Décommentez-le.

    net.ipv4.ip_forward=1
    

    Vous pouvez également exécuter sysctl -ppour que les modifications prennent effet immédiatement.

  5. Créez des conteneurs.

    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. Démarrez les conteneurs avec pct start 200et pct start 250.

  7. Rincez les iptablesrègles.

    iptables -F
    
  8. Activez NAT.

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

    vmbr0 est le pont qui comprend une interface externe.

  9. Autorisez le transfert depuis l'interface externe.

    iptables --append FORWARD --in-interface vmbr0 -j ACCEPT
    
  10. Autorisez le transfert des conteneurs vers 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. Supprimez l'autre transfert.

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

Maintenant, vérifiez qui 10.100.1.200peut cingler 8.8.8.8mais ne peut pas cingler 10.100.2.250et qui 10.100.2.250peut cingler 8.8.8.8mais ne peut pas cingler 10.100.1.200.

L'ordre des commandes liées à iptables est important. La meilleure façon de faire fonctionner vos règles est d'utiliser iptables-persistent. Ce forfait vous permet d'enregistrer des règles iptables aux fichiers /etc/iptables/rules.v4et /etc/iptables/rules.v6il peut les charger automatiquement après le redémarrage du système. Installez-le simplement avec ce qui suit.

apt-get install iptables-persistent

Sélectionnez YESlorsque vous y êtes invité.



Installer Docker sur Ubuntu 14.04

Installer Docker sur Ubuntu 14.04

Vous utilisez un système différent? Docker est une application qui permet de déployer des programmes exécutés en tant que conteneurs. Il a été écrit dans le populaire programme Go

Configuration de Sentry via Docker sur Ubuntu 16.04

Configuration de Sentry via Docker sur Ubuntu 16.04

Vous utilisez un système différent? Introduction Sentry est une solution open source pour le suivi des erreurs. Sentry suit les exceptions et autres messages utiles

Déployer une application PHP à laide de Docker-compose

Déployer une application PHP à laide de Docker-compose

Les applications PHP sont généralement composées dun serveur Web, dun système de base de données relationnelle et de linterpréteur de langage lui-même. Dans ce tutoriel, nous serons leveragin

Installer Rancher Server sur RancherOS

Installer Rancher Server sur RancherOS

Présentation RancherOS est un système dexploitation incroyablement léger (seulement environ 60 Mo) qui exécute un démon Docker système en tant que PID 0 pour exécuter les services système

Session collante avec Docker Swarm (CE) sur Debian 9

Session collante avec Docker Swarm (CE) sur Debian 9

Vous utilisez un système différent? Introduction Docker Swarm transforme vos serveurs individuels en un cluster dordinateurs; faciliter la mise à léchelle, la haute disponibilité et

Comment utiliser Docker: création de votre premier conteneur Docker

Comment utiliser Docker: création de votre premier conteneur Docker

Ce didacticiel explique les bases de la prise en main de Docker. Je suppose que Docker est déjà installé. Les étapes de ce didacticiel fonctionnent sur un

Équilibrage de charge avec Docker

Équilibrage de charge avec Docker

Lorsque vous exécutez une application Web, vous souhaitez normalement tirer le meilleur parti de vos ressources sans avoir à convertir votre logiciel pour utiliser le multithreading o

Sur CoreOS, configurez votre propre registre Docker

Sur CoreOS, configurez votre propre registre Docker

Nous connaissons et aimons tous Docker, une plateforme pour créer, gérer et distribuer des conteneurs dapplications sur plusieurs machines. Docker Inc. fournit un service t

Déployer une application Node.js à laide de Docker

Déployer une application Node.js à laide de Docker

Cet article vous montrera comment déployer votre application Node dans un conteneur Docker. Remarque: ce didacticiel suppose que Docker est installé et lu

Installer Rancher OS via iPXE

Installer Rancher OS via iPXE

Rancher OS est une distribution Linux très légère construite autour de Docker. LOS lui-même pèse environ 20 Mo. Ce tutoriel vous permettra de devenir opérationnel avec

Déployer Kubernetes avec Kubeadm sur CentOS 7

Déployer Kubernetes avec Kubeadm sur CentOS 7

Présentation Cet article est destiné à vous aider à obtenir un cluster Kubernetes opérationnel avec kubeadm en un rien de temps. Ce guide déploiera deux serveurs, sur

Installation de docker-compose sur CoreOS

Installation de docker-compose sur CoreOS

Cet article explique comment installer docker-compose sur CoreOS. Dans CoreOS, le dossier / usr / est immuable, donc le chemin standard / usr / local / bin nest pas disponible pour

Comment installer Harbor sur CentOS 7

Comment installer Harbor sur CentOS 7

Harbor est un serveur de registre de classe entreprise open source qui stocke et distribue des images Docker. Harbor étend la distribution open source Docker b

Installer Docker CE sur Ubuntu 18.04

Installer Docker CE sur Ubuntu 18.04

Introduction Docker est une application qui nous permet de déployer des programmes exécutés en tant que conteneurs. Il a été écrit dans le langage de programmation Go populaire

Créer un essaim Docker sur Alpine Linux 3.9.0

Créer un essaim Docker sur Alpine Linux 3.9.0

Introduction Ce guide vous montrera comment créer et configurer un essaim Docker à laide de plusieurs serveurs Alpine Linux 3.9.0 et Portainer. Veuillez noter que

Premiers pas avec SQL Server 2017 (MS-SQL) sur CentOS 7 avec Docker

Premiers pas avec SQL Server 2017 (MS-SQL) sur CentOS 7 avec Docker

Prérequis Docker engine 1.8+. Minimum de 4 Go despace disque. Minimum de 4 Go de RAM. Étape 1. Installer Docker Pour installer SQL-Server, Docker mus

Premiers pas avec Kubernetes sur CentOS 7

Premiers pas avec Kubernetes sur CentOS 7

Kubernetes est une plate-forme open source développée par Google pour gérer les applications conteneurisées sur un cluster de serveurs. Il s’appuie sur une décennie et

Installer Rancher sur Ubuntu 16.04

Installer Rancher sur Ubuntu 16.04

Vous utilisez un système différent? Introduction Rancher est une plate-forme open source pour exécuter des conteneurs et créer un service de conteneurs privé. Léleveur est la base

Installation de Docker CE sur CentOS 7

Installation de Docker CE sur CentOS 7

La technologie de conteneur Docker vous permet dexécuter des applications dans un environnement spécifique et isolé. Docker Community Edition (CE) est le nouveau nom du fre

Installer Docker CE sur Debian 9

Installer Docker CE sur Debian 9

Vous utilisez un système différent? Introduction Docker est une application qui permet le déploiement de logiciels dans des conteneurs virtuels. Il a été écrit dans le G

LIA peut-elle lutter contre un nombre croissant dattaques de ransomware

LIA peut-elle lutter contre un nombre croissant dattaques de ransomware

Les attaques de ransomware sont en augmentation, mais l'IA peut-elle aider à lutter contre le dernier virus informatique ? L'IA est-elle la réponse ? Lisez ici, sachez que l'IA est un boone ou un fléau

ReactOS : est-ce lavenir de Windows ?

ReactOS : est-ce lavenir de Windows ?

ReactOS, un système d'exploitation open source et gratuit est ici avec la dernière version. Cela peut-il suffire aux besoins des utilisateurs de Windows modernes et faire tomber Microsoft ? Découvrons-en plus sur cet ancien style, mais une expérience de système d'exploitation plus récente.

Restez connecté via lapplication de bureau WhatsApp 24 * 7

Restez connecté via lapplication de bureau WhatsApp 24 * 7

Whatsapp a finalement lancé l'application de bureau pour les utilisateurs Mac et Windows. Vous pouvez désormais accéder facilement à Whatsapp depuis Windows ou Mac. Disponible pour Windows 8+ et Mac OS 10.9+

Comment lIA peut-elle faire passer lautomatisation des processus au niveau supérieur ?

Comment lIA peut-elle faire passer lautomatisation des processus au niveau supérieur ?

Lisez ceci pour savoir comment l'intelligence artificielle devient populaire parmi les petites entreprises et comment elle augmente les probabilités de les faire grandir et de donner à leurs concurrents un avantage.

La mise à jour du supplément macOS Catalina 10.15.4 cause plus de problèmes quelle nen résout

La mise à jour du supplément macOS Catalina 10.15.4 cause plus de problèmes quelle nen résout

Récemment, Apple a publié macOS Catalina 10.15.4, une mise à jour supplémentaire pour résoudre les problèmes, mais il semble que la mise à jour cause davantage de problèmes, ce qui entraîne le bridage des machines mac. Lisez cet article pour en savoir plus

13 outils commerciaux dextraction de données de Big Data

13 outils commerciaux dextraction de données de Big Data

13 outils commerciaux d'extraction de données de Big Data

Quest-ce quun système de fichiers de journalisation et comment fonctionne-t-il ?

Quest-ce quun système de fichiers de journalisation et comment fonctionne-t-il ?

Notre ordinateur stocke toutes les données d'une manière organisée connue sous le nom de système de fichiers de journalisation. C'est une méthode efficace qui permet à l'ordinateur de rechercher et d'afficher des fichiers dès que vous appuyez sur la recherche.https://wethegeek.com/?p=94116&preview=true

Singularité technologique : un futur lointain de la civilisation humaine ?

Singularité technologique : un futur lointain de la civilisation humaine ?

Alors que la science évolue à un rythme rapide, prenant le pas sur une grande partie de nos efforts, les risques de nous soumettre à une Singularité inexplicable augmentent également. Lisez, ce que la singularité pourrait signifier pour nous.

Un aperçu de 26 techniques danalyse des mégadonnées : partie 1

Un aperçu de 26 techniques danalyse des mégadonnées : partie 1

Un aperçu de 26 techniques d'analyse des mégadonnées : partie 1

Limpact de lintelligence artificielle dans les soins de santé 2021

Limpact de lintelligence artificielle dans les soins de santé 2021

L'IA dans le domaine de la santé a fait de grands progrès au cours des dernières décennies. Ainsi, l'avenir de l'IA dans les soins de santé continue de croître de jour en jour.