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

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

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

  • LXC контейнери с Ubuntu 14.
  • Linux мрежови настройки и пренасочване на портове за контейнери.
  • SSH препращане за администриране на контейнери като ssh box1@example.comиssh box2@example.com
  • 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 root@10.100.0.200",no-X11-forwarding,no-agent-forwarding,no-port-forwarding <YOUR SSH KEY>

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

echo 'command="ssh root@10.100.0.200",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когато бъдете подканени.

Оставете коментар

Възходът на машините: Реални приложения на 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 машини. Прочетете тази статия, за да научите повече