Препарати
Настройка на ОС
мрежа
SSH достъп
Допълнителни настройки
Пренасочване на портове
Отделни контейнери
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, трябва да свържете всеки контейнер към персонален мост и да деактивирате препращането между мостовете.
Изтрийте съществуващите контейнери.
pct stop 200
pct stop 250
pct destroy 200
pct destroy 250
Променете съдържанието на /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
reboot
системата
Активирайте препращането
`sysctl -w net.ipv4.ip_forward=1`
За да направите тези промени постоянни, можете да редактирате /etc/sysctl.conf
файла и да намерите следния текст.
#net.ipv4.ip_forward=1
Декоментирайте го.
net.ipv4.ip_forward=1
Можете също да стартирате, за sysctl -p
да накарате промените да влязат в сила незабавно.
Създайте контейнери.
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
Започнете контейнерите с pct start 200
и pct start 250
.
Изчистете iptables
правилата.
iptables -F
Активирайте NAT.
iptables --table nat --append POSTROUTING --out-interface vmbr0 -j MASQUERADE
vmbr0
е мостът, който включва външен интерфейс.
Разрешете препращане от външния интерфейс.
iptables --append FORWARD --in-interface vmbr0 -j ACCEPT
Разрешете препращане от контейнерите към интернет.
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
Изхвърлете другото препращане.
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
когато бъдете подканени.