Сигурно разгръщане и управление на LXC контейнери в Ubuntu 14.04

LXC контейнерите (Linux контейнери) са функция на операционната система в Linux, която може да се използва за стартиране на множество изолирани Linux системи на един хост.

Тези инструкции ще ви преведат през основните стъпки от конфигурацията на сървъра за изолиран хостинг на Linux контейнери. Ще конфигурираме следните функции:

  • LXC контейнери с Ubuntu 14.
  • Linux мрежови настройки и пренасочване на портове за контейнери.
  • SSH препращане за администриране на контейнери като ssh [email protected]иssh [email protected]
  • Nginx прокси конфигурация за достъп до уебсайтове вътре в контейнери (по име на хост).
  • Допълнителни подобрения в сигурността за правилно управление на сървъра.

Това ръководство предполага, че:

  • Имате акаунт във Vultr.com .
  • Знаете как да конфигурирате виртуална машина с персонализиран ISO.
  • Знаете как да използвате SSH ключове и вече сте генерирали публични и частни ключове.

В края на урока ще получим два виртуални контейнера, които ще имат достъп до интернет, но не могат да пингуват един на друг. Ние също така ще конфигурираме пренасочване на портове от example.comкъм контейнери. Ще разположим защитен панел за конфигуриране и управление с помощта на инструменти от пакета Proxmox.

Препарати

Ще използваме Proxmox само за управление на LXC контейнери. По принцип той също поддържа KVM, но вложената виртуализация е забранена на Vultr. Преди да започнете, трябва да изтеглите Proxmox ISO от официалния уебсайт. Ще използваме Proxmox VE 5.0 ISO Installer. Инсталирайте ОС от изображението с настройки по подразбиране и рестартирайте виртуалната машина. Също така, можете ръчно да инсталирате proxmox от източници, но това не е необходимо в повечето случаи (следвайте инструкциите тук ).

Настройка на ОС

Свържете се с вашия хост чрез SSH, актуализирайте списъка с шаблони на proxmox и изтеглете подходящ шаблон за контейнери.

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

Сега трябва да създадем Linux контейнер с мрежов интерфейс, свързан към linux мост. Отворете /etc/network/interfacesи добавете следните редове:

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

След рестартиране на системата можете да създадете нов контейнер от Ubuntu 14.04шаблона.

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

Можете да потвърдите вашия контейнер с помощта на pct list, стартирайте контейнер #200 с pct start 200и въведете неговата обвивка с pct enter 200. Можете също да проверите мрежовите настройки и адреси с ip addr.

мрежа

За да осигурим интернет връзка във вашия контейнер, трябва да активираме NAT. Следното ще позволи трафикът да се препраща от контейнера към интернет с помощта на NAT технологията. В vmbr0мост е свързан с външен интерфейс и vmbr1моста е свързан към контейнерите.

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

Въведете контейнера с pct enter 200и конфигурирайте уеб сървъра вътре.

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

Сега трябва да конфигурираме Nginx на вашия сървър да прокси уебсайтове в контейнери.

apt-get update
apt-get install nginx

Създайте нов конфигурационен файл /etc/nginx/sites-available/box200със следното съдържание:

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 вече ще прокси всяка HTTP заявка за server200.example.comот вашия сървър към контейнера с IP 10.100.0.200. Активирайте тази конфигурация.

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

SSH достъп

Ако искате да осигурите лесен достъп до пясъчните кутии, трябва да препратите SSH сесиите в контейнерите. За да направите това, създайте нов потребител на вашия root сървър. Не забравяйте да въведете парола, други параметри не са необходими.

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

Копирайте този SSH ключ и влезте в контейнера, за да добавите ключа.

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

На вашия сървър добавете следния ред към .ssh/authorized_keysфайла.

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

Не забравяйте да промените <YOUR SSH KEY>домашния си публичен ключ. Като алтернатива можете да изпълните следното от командния ред.

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

След това можете да се свържете с вашата пясъчна кутия с ssh.

`ssh box200@<your_server_IP>`

Допълнителни настройки

Време е да приложите няколко подобрения в сигурността. Първо, искаме да променим SSH порта по подразбиране. След това искаме да защитим нашата страница за управление на Proxmox с основно HTTP удостоверяване.

nano /etc/ssh/sshd_config

Декоментирайте и променете реда

#Port 22 

да се

Port 24000 

Рестартирайте ssh.

service ssh restart

Свържете се отново към ssh с новия порт.

ssh root@<your_IP> -p 24000

Задайте парола за Proxmox.

Създайте файл /etc/default/pveproxy.

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

Рестартирайте, pveproxyза да влязат в сила промените.

/etc/init.d/pveproxy restart

Конфигурирайте nginx (ако не сте го правили преди).

apt-get install nginx
service nginx restart

Създайте конфигурация по подразбиране в /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; }
}

Вземете валиден SSL сертификат и актуализирайте конфигурацията на nginx. Например, това може да стане с помощта на certbox и letsencrypt. За повече информация щракнете тук .

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

Сега вашата конфигурация на nginx трябва да изглежда така (или можете да я промените ръчно след това). Не забравяйте да декоментирате ssl, auth и редове за местоположение.

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
}

Създайте /etc/htpasswdфайл с помощта на Htpasswd генератора .

nano /etc/nginx/htpasswd

Рестартирайте Nginx

service nginx restart

Вече можете да видите конзолата за управление https://example.comслед основно удостоверяване.

Пренасочване на портове

Контейнерите вече са достъпни чрез HTTP заявки и SSH. Сега можем да конфигурираме пренасочване на портове от външния сървър към контейнерите. Например, за картографиране example.com:8080да 10.100.0.200:3000въведете следното.

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

Можете да видите текущите правила.

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

Можете също да изтриете правило по номер със следното.

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

Отделни контейнери

Вече имаме достъп до един контейнер от друг.

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

Ако искате да ограничите достъпа от контейнер 250 до 200, трябва да свържете всеки контейнер към персонален мост и да деактивирате препращането между мостовете.

  1. Изтрийте съществуващите контейнери.

    pct stop 200
    pct stop 250
    pct destroy 200
    pct destroy 250
    
  2. Променете съдържанието на /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 системата

  4. Активирайте препращането

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

    За да направите тези промени постоянни, можете да редактирате /etc/sysctl.confфайла и да намерите следния текст.

    #net.ipv4.ip_forward=1
    

    Декоментирайте го.

    net.ipv4.ip_forward=1
    

    Можете също да стартирате, за sysctl -pда накарате промените да влязат в сила незабавно.

  5. Създайте контейнери.

    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. Започнете контейнерите с pct start 200и pct start 250.

  7. Изчистете iptablesправилата.

    iptables -F
    
  8. Активирайте NAT.

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

    vmbr0 е мостът, който включва външен интерфейс.

  9. Разрешете препращане от външния интерфейс.

    iptables --append FORWARD --in-interface vmbr0 -j ACCEPT
    
  10. Разрешете препращане от контейнерите към интернет.

    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. Изхвърлете другото препращане.

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

Сега проверете, че 10.100.1.200може да ping, 8.8.8.8но не може да ping 10.100.2.250и че 10.100.2.250може да ping, 8.8.8.8но не може да ping 10.100.1.200.

Редът на командите, свързани с iptables, е важен. Най-добрият начин да управлявате вашите правила е да използвате iptables-persistent. Този пакет ви помага да запазвате iptables правила във файловете /etc/iptables/rules.v4и /etc/iptables/rules.v6може автоматично да ги зарежда след рестартиране на системата. Просто го инсталирайте със следното.

apt-get install iptables-persistent

Изберете, YESкогато бъдете подканени.


Ето как да проверите Hyper-V контейнерите в Windows 10 Insider

Ето как да проверите Hyper-V контейнерите в Windows 10 Insider

Microsoft обясни в нова публикация в блога как Windows Insiders могат да тестват Hyper-V контейнери на Windows 10, ново решение за виртуализация, което позволява на приложенията да работят, без да засягат останалата част от вашата операционна система.

Как да инсталирате Harbor на CentOS 7

Как да инсталирате Harbor на CentOS 7

Harbor е регистър на сървър от корпоративен клас с отворен код, който съхранява и разпространява изображения на Docker. Harbour разширява Docker Distribution с отворен код b

Инсталирайте Rancher OS чрез iPXE

Инсталирайте Rancher OS чрез iPXE

Rancher OS е много лека Linux дистрибуция, изградена около Docker. Самата ОС тежи около 20MB. Този урок ще ви накара да работите с него

На CoreOS настройте свой собствен регистър на Docker

На CoreOS настройте свой собствен регистър на Docker

Всички познаваме и обичаме Docker, платформа за създаване, управление и разпространение на контейнери за приложения на множество машини. Docker Inc. предоставя услуга t

Инсталиране на docker-compose на CoreOS

Инсталиране на docker-compose на CoreOS

Тази статия обяснява как да инсталирате docker-compose на CoreOS. В CoreOS папката /usr/ е неизменна, така че стандартният път /usr/local/bin е недостъпен за

Инсталирайте Rancher на CentOS 7

Инсталирайте Rancher на CentOS 7

Използване на различна система? Въведение Rancher е платформа с отворен код за управление на контейнери и изграждане на частна услуга за контейнери. Rancher е база

Инсталирайте Docker CE на Ubuntu 18.04

Инсталирайте Docker CE на Ubuntu 18.04

Въведение Docker е приложение, което ни позволява да разгръщаме програми, които се изпълняват като контейнери. Той е написан на популярния език за програмиране Go

Създайте Docker Swarm на Alpine Linux 3.9.0

Създайте Docker Swarm на Alpine Linux 3.9.0

Въведение Това ръководство ще ви покаже как да създадете и конфигурирате Docker рояк, използвайки множество Alpine Linux 3.9.0 сървъри и Portainer. Моля, имайте предвид, че

Разгръщане на PHP приложение с помощта на Docker-compose

Разгръщане на PHP приложение с помощта на Docker-compose

PHP приложенията обикновено се съставят от уеб сървър, система за релационна база данни и самия езиков интерпретатор. В този урок ще бъдем лостове

Баланс на натоварването с Docker

Баланс на натоварването с Docker

Когато изпълнявате уеб приложение, обикновено искате да извлечете максимума от ресурсите си, без да се налага да конвертирате софтуера си за използване на многонишков

Разгръщане на приложение Node.js с помощта на Docker

Разгръщане на приложение Node.js с помощта на Docker

Тази статия ще ви покаже как да разположите вашето приложение Node в Docker контейнер. Забележка: Този урок предполага, че имате инсталиран и прочетен Docker

Инсталиране на Docker CE на CentOS 7

Инсталиране на Docker CE на CentOS 7

Docker контейнерната технология ви позволява да стартирате приложения в специфична и изолирана среда. Docker Community Edition (CE) е новото име за fre

Внедряване на Kubernetes с Kubeadm на CentOS 7

Внедряване на Kubernetes с Kubeadm на CentOS 7

Общ преглед Тази статия има за цел да ви помогне да стартирате и стартирате Kubernetes клъстер с kubeadm за нула време. Това ръководство ще разгръща два сървъра на

Инсталиране на Docker на CentOS 7

Инсталиране на Docker на CentOS 7

Използване на разл��чна система? Docker е приложение, което позволява внедряване на софтуер във виртуални контейнери. Написано е в програмата Go

Инсталиране на Docker CE на Debian 9

Инсталиране на Docker CE на Debian 9

Използване на различна система? Въведение Docker е приложение, което позволява внедряване на софтуер във виртуални контейнери. Беше написано в Г

Започнете със SQL Server 2017 (MS-SQL) на CentOS 7 с Docker

Започнете със SQL Server 2017 (MS-SQL) на CentOS 7 с Docker

Предпоставки Docker engine 1.8+. Минимум 4GB дисково пространство. Минимум 4GB RAM. Стъпка 1. Инсталирайте Docker За да инсталирате SQL-Server, Docker трябва

Залепваща сесия с Docker Swarm (CE) на Debian 9

Залепваща сесия с Docker Swarm (CE) на Debian 9

Използване на различна система? Въведение Docker Swarm превръща вашите отделни сървъри в клъстер от компютри; улесняване на мащабирането, висока достъпност

Два инструмента за графично управление на Docker: DockerUI и корабостроителница

Два инструмента за графично управление на Docker: DockerUI и корабостроителница

С помощта на приложението Vultr Docker можете лесно да разположите Docker на вашия сървър на Vultr. Междувременно можете да улесните задачата за управление на Docker

Инсталирайте Rancher Server на RancherOS

Инсталирайте Rancher Server на RancherOS

Общ преглед RancherOS е невероятно лека операционна система (само около 60 MB), която изпълнява системен Docker демон като PID 0 за стартиране на системни услуги

Първи стъпки с Kubernetes на CentOS 7

Първи стъпки с Kubernetes на CentOS 7

Kubernetes е платформа с отворен код, разработена от Google за управление на контейнерни приложения в клъстер от сървъри. Тя се основава на едно десетилетие и

Възходът на машините: Реални приложения на AI

Възходът на машините: Реални приложения на AI

Изкуственият интелект не е в бъдещето, тук е точно в настоящето. В този блог Прочетете как приложенията за изкуствен интелект са повлияли на различни сектори.

DDOS атаки: кратък преглед

DDOS атаки: кратък преглед

Вие също сте жертва на DDOS атаки и сте объркани относно методите за превенция? Прочетете тази статия, за да разрешите вашите запитвания.

Чудили ли сте се как хакерите печелят пари?

Чудили ли сте се как хакерите печелят пари?

Може би сте чували, че хакерите печелят много пари, но чудили ли сте се някога как печелят такива пари? нека обсъдим.

Революционни изобретения на Google, които ще улеснят живота ви.

Революционни изобретения на Google, които ще улеснят живота ви.

Искате ли да видите революционни изобретения на Google и как тези изобретения промениха живота на всяко човешко същество днес? След това прочетете в блога, за да видите изобретенията на Google.

Friday Essential: Какво се случи с колите, задвижвани от изкуствен интелект?

Friday Essential: Какво се случи с колите, задвижвани от изкуствен интелект?

Концепцията за самоуправляващи се автомобили да тръгват по пътищата с помощта на изкуствен интелект е мечта, която имаме от известно време. Но въпреки няколкото обещания, те не се виждат никъде. Прочетете този блог, за да научите повече…

Технологична сингулярност: далечно бъдеще на човешката цивилизация?

Технологична сингулярност: далечно бъдеще на човешката цивилизация?

Тъй като науката се развива с бързи темпове, поемайки много от нашите усилия, рискът да се подложим на необяснима сингулярност също нараства. Прочетете какво може да означава сингулярността за нас.

Еволюция на съхранението на данни – инфографика

Еволюция на съхранението на данни – инфографика

Методите за съхранение на данните може да се развиват от раждането на данните. Този блог обхваща развитието на съхранението на данни на базата на инфографика.

Функционалности на референтните архитектурни слоеве за големи данни

Функционалности на референтните архитектурни слоеве за големи данни

Прочетете блога, за да разберете различни слоеве в архитектурата на големи данни и техните функционалности по най-простия начин.

6 невероятни предимства от наличието на интелигентни домашни устройства в живота ни

6 невероятни предимства от наличието на интелигентни домашни устройства в живота ни

В този дигитално задвижван свят устройствата за интелигентен дом се превърнаха в решаваща част от живота. Ето няколко невероятни предимства на интелигентните домашни устройства за това как те правят живота ни струващ и по-опростен.

Актуализацията на допълнението на macOS Catalina 10.15.4 причинява повече проблеми, отколкото решава

Актуализацията на допълнението на macOS Catalina 10.15.4 причинява повече проблеми, отколкото решава

Наскоро Apple пусна macOS Catalina 10.15.4 допълнителна актуализация за отстраняване на проблеми, но изглежда, че актуализацията причинява повече проблеми, водещи до блокиране на mac машини. Прочетете тази статия, за да научите повече