Припреме
ОС Сетуп
Мрежа
ССХ приступ
Додатна подешавања
Порт Форвардинг
Одвојени контејнери
ЛКСЦ контејнери (Линук контејнери) су функција оперативног система у Линук-у која се може користити за покретање више изолованих Линук система на једном хосту.
Ова упутства ће вас провести кроз основне кораке конфигурације сервера за хостовање изолованих Линук контејнера. Конфигурисаћемо следеће карактеристике:
- ЛКСЦ контејнери са Убунту 14.
- Линук мрежна подешавања и прослеђивање портова за контејнере.
- ССХ прослеђивање за администрацију контејнера једноставно као
ssh [email protected]
иssh [email protected]
- Нгинк проки конфигурација за приступ веб локацијама унутар контејнера (према имену хоста).
- Додатна безбедносна побољшања за правилно управљање сервером.
Овај водич претпоставља да:
- Имате налог на Вултр.цом .
- Знате како да конфигуришете виртуелну машину са прилагођеним ИСО-ом.
- Знате како да користите ССХ кључеве и већ сте генерисали јавне и приватне кључеве.
На крају туторијала добићемо два виртуелна контејнера који ће имати приступ интернету, али не могу пинговати један другог. Такође ћемо конфигурисати прослеђивање портова од example.com
до контејнера. Ми ћемо поставити безбедну конфигурацију и панел за управљање уз помоћ алата из Прокмок пакета.
Припреме
Користићемо Прокмок само за управљање ЛКСЦ контејнерима. Генерално, такође подржава КВМ, али угнежђена виртуелизација је забрањена на Вултр-у. Пре почетка, Прокмок ИСО треба преузети са званичне веб странице. Користићемо Proxmox VE 5.0 ISO Installer
. Инсталирајте ОС са слике са подразумеваним подешавањима и поново покрените виртуелну машину. Такође, можете ручно да инсталирате прокмок из извора, али то у већини случајева није неопходно (пратите упутства овде ).
ОС Сетуп
Повежите се са својим хостом преко ССХ-а, ажурирајте листу прокмок шаблона и преузмите одговарајући шаблон за контејнере.
apt-get update
pveam update
pveam available
pveam download local ubuntu-14.04-standard_14.04-1_amd64.tar.gz
Сада морамо да креирамо линук контејнер са мрежним интерфејсом повезаним на линук мост. Отворите /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
. Следеће ће омогућити прослеђивање саобраћаја из контејнера на интернет уз помоћ НАТ технологије. 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
Сада морамо да конфигуришемо Нгинк на вашем серверу за прокси веб локације у контејнере.
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/;
}
}
Нгинк ће сада проки сваки ХТТП захтев server200.example.com
са вашег сервера у контејнер са ИП 10.100.0.200. Активирајте ову конфигурацију.
ln -s /etc/nginx/sites-available/box200 /etc/nginx/sites-enabled/
service nginx restart
ССХ приступ
Ако желите да омогућите лак приступ сандбок-овима, потребно је да проследите ССХ сесије у контејнере. Да бисте то урадили, креирајте новог корисника на вашем роот серверу. Не заборавите да унесете лозинку, други параметри нису потребни.
adduser box200
su - box200
ssh-keygen
cat .ssh/id_rsa.pub
exit
Копирајте овај ССХ кључ и унесите контејнер да бисте додали кључ.
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 box200@<your_server_IP>`
Додатна подешавања
Време је да примените неколико безбедносних побољшања. Прво, желимо да променимо подразумевани ССХ порт. Затим желимо да заштитимо нашу страницу за управљање Прокмок-ом основном ХТТП аутентификацијом.
nano /etc/ssh/sshd_config
Уклоните коментаре и промените линију
#Port 22
до
Port 24000
Поново покрените ссх.
service ssh restart
Поново се повежите на ссх са новим портом.
ssh root@<your_IP> -p 24000
Поставите Прокмок лозинку.
Креирајте датотеку /etc/default/pveproxy
.
ALLOW_FROM="127.0.0.1"
DENY_FROM="all"
POLICY="allow"
Поново покрените pveproxy
да би промене ступиле на снагу.
/etc/init.d/pveproxy restart
Конфигуришите нгинк (ако то раније нисте урадили).
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; }
}
Набавите важећи ССЛ сертификат и ажурирајте своју нгинк конфигурацију. На пример, то се може урадити уз помоћ цертбок и летсенцрипт. За више информација, кликните овде .
wget https://dl.eff.org/certbot-auto
chmod +x certbot-auto
./certbot-auto --nginx
Сада би ваша нгинк конфигурација требало да изгледа овако (или је можете променити ручно након тога). Не заборавите да декоментирате ссл, аутх и линије за локацију.
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
датотеку користећи Хтпассвд генератор .
nano /etc/nginx/htpasswd
Поново покрените Нгинк
service nginx restart
Сада можете да видите управљачку конзолу https://example.com
након основне аутентификације.
Порт Форвардинг
Контејнери су сада доступни преко ХТТП захтева и ССХ. Сада можемо да конфигуришемо прослеђивање портова са спољног сервера на контејнере. На пример, за мапирање 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
Омогући НАТ.
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
може да пингује, 8.8.8.8
али не може да пингује 10.100.2.250
и да 10.100.2.250
може да пингује, 8.8.8.8
али не може да пингује 10.100.1.200
.
Редослед команди везаних за иптаблес је важан. Најбољи начин да управљате својим правилима је да користите iptables-persistent
. Овај пакет вам помаже да сачувате иптаблес правила у датотеке /etc/iptables/rules.v4
и /etc/iptables/rules.v6
може их аутоматски учитати након поновног покретања система. Само га инсталирајте са следећим.
apt-get install iptables-persistent
Изаберите YES
када се то од вас затражи.