Implante e gerencie com segurança contêineres LXC no Ubuntu 14.04

Os contêineres LXC (contêineres do Linux) são um recurso do sistema operacional no Linux que pode ser usado para executar vários sistemas Linux isolados em um único host.

Essas instruções orientarão você nas etapas básicas da configuração do servidor para hospedagem isolada de contêineres Linux. Vamos configurar os seguintes recursos:

  • Contêineres LXC com o Ubuntu 14.
  • Configurações de rede Linux e encaminhamento de porta para contêineres.
  • Encaminhamento SSH para administração recipiente tão simples como ssh [email protected]essh [email protected]
  • Configuração do proxy Nginx para acessar sites dentro de contêineres (por nome do host).
  • Melhorias de segurança adicionais para gerenciamento adequado do servidor.

Este guia pressupõe que:

  • Você tem uma conta no Vultr.com .
  • Você sabe como configurar uma máquina virtual com um ISO personalizado.
  • Você sabe como usar chaves SSH e já gerou chaves públicas e privadas.

No final do tutorial, obteremos dois contêineres virtuais que terão acesso à Internet, mas não poderão executar ping um ao outro. Também configuraremos o encaminhamento de porta example.compara os contêineres. Implementaremos o painel de configuração e gerenciamento seguro com a ajuda de ferramentas do pacote Proxmox.

Preparações

Usaremos o Proxmox apenas para o gerenciamento de contêineres LXC. Geralmente, ele também suporta KVM, mas a virtualização aninhada é proibida no Vultr. Antes do início, um Proxmox ISO deve ser baixado do site oficial. Nós vamos usar o Proxmox VE 5.0 ISO Installer. Instale o sistema operacional a partir da imagem com as configurações padrão e reinicie a máquina virtual. Além disso, você pode instalar manualmente o proxmox a partir de fontes, mas isso não é necessário na maioria dos casos (siga as instruções aqui ).

Configuração do SO

Conecte-se ao seu host por SSH, atualize a lista de modelos proxmox e faça o download de um modelo adequado para contêineres.

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

Agora, precisamos criar um contêiner linux com a interface de rede conectada a uma ponte linux. Abra /etc/network/interfacese acrescente as seguintes linhas:

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

Após a reinicialização do sistema, você pode criar um novo contêiner a partir do Ubuntu 14.04modelo.

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

Você pode verificar seu contêiner usando pct list, inicie o contêiner nº 200 pct start 200e insira seu shell com pct enter 200. Você também pode verificar as configurações e endereços de rede com ip addr.

Rede

Para fornecer conexão à Internet dentro do seu contêiner, precisamos ativar NAT. O seguinte permitirá que o tráfego seja encaminhado do contêiner para a Internet com a ajuda da tecnologia NAT. A vmbr0ponte está conectada à interface externa e a vmbr1ponte está conectada aos contêineres.

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

Entre no contêiner pct enter 200e configure o servidor da web.

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

Agora, precisamos configurar o Nginx no seu servidor para proxy de sites em contêineres.

apt-get update
apt-get install nginx

Crie um novo arquivo de configuração /etc/nginx/sites-available/box200com o seguinte conteúdo:

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/;
    }
}

O Nginx agora fará proxy de cada solicitação HTTP server200.example.comdo servidor para o contêiner com IP 10.100.0.200. Ative esta configuração.

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

Acesso SSH

Se você deseja fornecer acesso fácil às caixas de proteção, é necessário encaminhar as sessões SSH para os contêineres. Para fazer isso, crie um novo usuário no seu servidor raiz. Não se esqueça de inserir uma senha, outros parâmetros não são necessários.

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

Copie essa chave SSH e insira o contêiner para anexar a chave.

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

No seu servidor, adicione a seguinte linha ao .ssh/authorized_keysarquivo.

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

Não esqueça de mudar <YOUR SSH KEY>para sua chave pública doméstica. Como alternativa, você pode executar o seguinte na linha de comando.

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

Em seguida, você pode se conectar à sua caixa de areia com o ssh.

`ssh box200@<your_server_IP>`

Configurações adicionais

É hora de implementar várias melhorias de segurança. Primeiro, queremos alterar a porta SSH padrão. Em seguida, queremos proteger nossa página de gerenciamento do Proxmox com autenticação HTTP básica.

nano /etc/ssh/sshd_config

Remova o comentário e altere a linha

#Port 22 

para

Port 24000 

Reinicie o ssh.

service ssh restart

Reconecte-se ao ssh com a nova porta.

ssh root@<your_IP> -p 24000

Defina uma senha do Proxmox.

Crie arquivo /etc/default/pveproxy.

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

Reinicie pveproxypara que as alterações tenham efeito.

/etc/init.d/pveproxy restart

Configure o nginx (se você não tiver feito isso antes).

apt-get install nginx
service nginx restart

Crie uma configuração padrão no /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; }
}

Obtenha um certificado SSL válido e atualize sua configuração nginx. Por exemplo, isso pode ser feito com a ajuda de certbox e letsencrypt. Para mais informações, clique aqui .

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

Agora, sua configuração do nginx deve ficar assim (ou você pode alterá-la manualmente depois). Não se esqueça de descomentar ssl, auth e linhas de localização.

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
}

Crie um /etc/htpasswdarquivo usando o gerador Htpasswd .

nano /etc/nginx/htpasswd

Reinicie o Nginx

service nginx restart

Agora você pode visualizar o console de gerenciamento https://example.comapós a autenticação básica.

Encaminhamento de porta

Os contêineres estão agora disponíveis por solicitações HTTP e SSH. Agora, podemos configurar o encaminhamento de porta do servidor externo para os contêineres. Por exemplo, para mapear example.com:8080para 10.100.0.200:3000inserir o seguinte.

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

Você pode ver as regras atuais.

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

Você também pode excluir uma regra pelo número com o seguinte.

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

Recipientes separados

Agora podemos acessar um contêiner de outro.

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 você deseja restringir o acesso do contêiner 250 a 200, é necessário conectar cada contêiner a uma ponte pessoal e desativar o encaminhamento entre pontes.

  1. Exclua contêineres existentes.

    pct stop 200
    pct stop 250
    pct destroy 200
    pct destroy 250
    
  2. Mude o conteúdo 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 o sistema

  4. Ativar encaminhamento

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

    Para tornar essas alterações permanentes, você pode editar o /etc/sysctl.confarquivo e encontrar o texto a seguir.

    #net.ipv4.ip_forward=1
    

    Remova o comentário.

    net.ipv4.ip_forward=1
    

    Você também pode executar sysctl -ppara que as alterações entrem em vigor imediatamente.

  5. Crie contêineres.

    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. Inicie os contêineres com pct start 200e pct start 250.

  7. Liberar as iptablesregras.

    iptables -F
    
  8. Habilite o NAT.

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

    vmbr0 é a ponte que inclui interface externa.

  9. Permitir o encaminhamento a partir da interface externa.

    iptables --append FORWARD --in-interface vmbr0 -j ACCEPT
    
  10. Permitir o encaminhamento dos contêineres para 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. Solte o outro encaminhamento.

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

Agora, verifique se é 10.100.1.200possível executar ping 8.8.8.8mas não pode executar ping 10.100.2.250e se 10.100.2.250pode executar ping 8.8.8.8mas não pode executar ping 10.100.1.200.

A ordem dos comandos relacionados ao iptables é importante. A melhor maneira de operar suas regras é usar iptables-persistent. Este pacote ajuda a salvar as regras do iptables nos arquivos /etc/iptables/rules.v4e /etc/iptables/rules.v6pode carregá-las automaticamente após a reinicialização do sistema. Basta instalá-lo com o seguinte.

apt-get install iptables-persistent

Selecione YESquando solicitado.



Leave a Comment

Instalando o Docker no Ubuntu 14.04

Instalando o Docker no Ubuntu 14.04

Usando um sistema diferente? O Docker é um aplicativo que permite implantar programas executados como contêineres. Foi escrito no popular programa Go

Configurar Sentry via Docker no Ubuntu 16.04

Configurar Sentry via Docker no Ubuntu 16.04

Usando um sistema diferente? Introdução O Sentry é uma solução de código aberto para rastreamento de erros. O Sentry rastreia exceções e outras mensagens úteis

Instale o Rancher Server no RancherOS

Instale o Rancher Server no RancherOS

O RancherOS é um sistema operacional incrivelmente leve (apenas cerca de 60 MB) que executa um daemon do Docker do sistema como PID 0 para executar serviços do sistema

Como instalar o Harbor no CentOS 7

Como instalar o Harbor no CentOS 7

O Harbor é um servidor de registro de classe empresarial de código aberto que armazena e distribui imagens do Docker. Harbor estende o Docker Distribution b de código aberto

Como usar o Docker: Criando seu primeiro contêiner Docker

Como usar o Docker: Criando seu primeiro contêiner Docker

Este tutorial explica os conceitos básicos de introdução ao Docker. Presumo que você já tenha o Docker instalado. As etapas deste tutorial funcionarão em um

Equilíbrio de carga com o Docker

Equilíbrio de carga com o Docker

Ao executar um aplicativo Web, normalmente você deseja aproveitar ao máximo seus recursos sem precisar converter seu software para usar multithreading

No CoreOS, configure seu próprio registro do Docker

No CoreOS, configure seu próprio registro do Docker

Todos conhecemos e amamos o Docker, uma plataforma para criar, gerenciar e distribuir contêineres de aplicativos em várias máquinas. A Docker Inc. fornece um serviço t

Implantar um aplicativo Node.js usando o Docker

Implantar um aplicativo Node.js usando o Docker

Este artigo mostra como implantar o aplicativo Node em um contêiner do Docker. Nota: Este tutorial pressupõe que você tenha o Docker instalado e leia

Criar um enxame Docker no Alpine Linux 3.9.0

Criar um enxame Docker no Alpine Linux 3.9.0

Introdução Este guia mostra como criar e configurar um enxame Docker usando vários servidores Alpine Linux 3.9.0 e o Portainer. Esteja ciente de que

Implante o Kubernetes com o Kubeadm no CentOS 7

Implante o Kubernetes com o Kubeadm no CentOS 7

Visão geral Este artigo tem como objetivo ajudá-lo a colocar um cluster do Kubernetes em funcionamento com o kubeadm rapidamente. Este guia estará implantando dois servidores, em

Instalando o docker-compose no CoreOS

Instalando o docker-compose no CoreOS

Este artigo explica como instalar o docker-compose no CoreOS. No CoreOS, a pasta / usr / é imutável, portanto o caminho padrão / usr / local / bin não está disponível para

Instale o Docker CE no Ubuntu 18.04

Instale o Docker CE no Ubuntu 18.04

Introdução O Docker é um aplicativo que nos permite implantar programas executados como contêineres. Foi escrito na popular linguagem de programação Go

Introdução ao Kubernetes no CentOS 7

Introdução ao Kubernetes no CentOS 7

O Kubernetes é uma plataforma de código aberto desenvolvida pelo Google para gerenciar aplicativos em contêineres em um cluster de servidores. Ele se baseia em uma década e

Implantar um aplicativo PHP usando o Docker-compone

Implantar um aplicativo PHP usando o Docker-compone

Os aplicativos PHP geralmente são compostos por um servidor da web, um sistema de banco de dados relacional e o próprio interpretador de linguagem. Neste tutorial, estaremos alavancando

Instale o Rancher no Ubuntu 16.04

Instale o Rancher no Ubuntu 16.04

Usando um sistema diferente? Introdução O Rancher é uma plataforma de código aberto para executar contêineres e criar um serviço de contêiner particular. Rancheiro é a base

Sessão complicada com Docker Swarm (CE) no Debian 9

Sessão complicada com Docker Swarm (CE) no Debian 9

Usando um sistema diferente? Introdução O Docker Swarm transforma seus servidores individuais em um cluster de computadores; facilitando o dimensionamento, alta disponibilidade e

Instalando o Docker CE no CentOS 7

Instalando o Docker CE no CentOS 7

A tecnologia de contêiner do Docker permite executar aplicativos em um ambiente específico e isolado. Docker Community Edition (CE) é o novo nome para o fre

Introdução ao SQL Server 2017 (MS-SQL) no CentOS 7 com Docker

Introdução ao SQL Server 2017 (MS-SQL) no CentOS 7 com Docker

Pré-requisitos Docker engine 1.8+. Mínimo de 4 GB de espaço em disco. Mínimo de 4 GB de RAM. Etapa 1. Instalar o Docker Para instalar o SQL-Server, o Docker deve

Instalando o Docker CE no Debian 9

Instalando o Docker CE no Debian 9

Usando um sistema diferente? Introdução O Docker é um aplicativo que permite a implantação de software em contêineres virtuais. Foi escrito no G

A IA pode lutar contra o aumento do número de ataques de ransomware

A IA pode lutar contra o aumento do número de ataques de ransomware

Os ataques de ransomware estão aumentando, mas a IA pode ajudar a lidar com os vírus de computador mais recentes? AI é a resposta? Leia aqui para saber se é AI boone ou bane

ReactOS: Este é o futuro do Windows?

ReactOS: Este é o futuro do Windows?

ReactOS, um sistema operacional de código aberto e gratuito está aqui com a versão mais recente. Será que ela pode atender às necessidades dos usuários modernos do Windows e derrubar a Microsoft? Vamos descobrir mais sobre esse estilo antigo, mas uma experiência de sistema operacional mais recente.

Fique conectado por meio do aplicativo WhatsApp Desktop 24 * 7

Fique conectado por meio do aplicativo WhatsApp Desktop 24 * 7

O Whatsapp finalmente lançou o aplicativo Desktop para usuários de Mac e Windows. Agora você pode acessar o Whatsapp do Windows ou Mac facilmente. Disponível para Windows 8+ e Mac OS 10.9+

Como a IA pode levar a automação de processos ao próximo nível?

Como a IA pode levar a automação de processos ao próximo nível?

Leia isto para saber como a Inteligência Artificial está se tornando popular entre as empresas de pequena escala e como está aumentando as probabilidades de fazê-las crescer e dar vantagem a seus concorrentes.

A atualização do suplemento do macOS Catalina 10.15.4 está causando mais problemas do que resolvendo

A atualização do suplemento do macOS Catalina 10.15.4 está causando mais problemas do que resolvendo

Recentemente, a Apple lançou o macOS Catalina 10.15.4, uma atualização suplementar para corrigir problemas, mas parece que a atualização está causando mais problemas, levando ao bloqueio de máquinas mac. Leia este artigo para saber mais

13 Ferramentas de Extração de Dados Comerciais de Big Data

13 Ferramentas de Extração de Dados Comerciais de Big Data

13 Ferramentas de Extração de Dados Comerciais de Big Data

O que é um sistema de arquivos de registro no diário e como ele funciona?

O que é um sistema de arquivos de registro no diário e como ele funciona?

Nosso computador armazena todos os dados de uma maneira organizada conhecida como sistema de arquivos Journaling. É um método eficiente que permite ao computador pesquisar e exibir arquivos assim que você clicar em search.https: //wethegeek.com/? P = 94116 & preview = true

Singularidade tecnológica: um futuro distante da civilização humana?

Singularidade tecnológica: um futuro distante da civilização humana?

À medida que a ciência evolui em um ritmo rápido, assumindo muitos de nossos esforços, os riscos de nos sujeitarmos a uma singularidade inexplicável também aumentam. Leia, o que a singularidade pode significar para nós.

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

O impacto da inteligência artificial na saúde 2021

O impacto da inteligência artificial na saúde 2021

A IA na área da saúde deu grandes saltos nas últimas décadas. Portanto, o futuro da IA ​​na área da saúde ainda está crescendo dia a dia.