Повстання машин: застосування ШІ в реальному світі
Штучний інтелект не в майбутньому, він тут прямо в сьогоденні У цьому блозі Прочитайте, як програми штучного інтелекту вплинули на різні сектори.
Контейнери LXC (контейнери Linux) — це функція операційної системи в Linux, яку можна використовувати для запуску кількох ізольованих систем Linux на одному хості.
Ці інструкції проведуть вас через основні кроки налаштування сервера для ізольованого хостингу контейнерів Linux. Ми налаштуємо такі функції:
ssh box1@example.comіssh box2@example.comЦей посібник передбачає, що:
Наприкінці уроку ми отримаємо два віртуальні контейнери, які матимуть доступ до Інтернету, але не можуть пінгувати один одному. Ми також налаштуємо переадресацію портів від 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 буде server200.example.comпроксувати кожен запит HTTP від вашого сервера до контейнера з IP 10.100.0.200. Активуйте цю конфігурацію.
ln -s /etc/nginx/sites-available/box200 /etc/nginx/sites-enabled/
service nginx restart
Якщо ви хочете забезпечити легкий доступ до пісочниць, вам потрібно пересилати сеанси SSH в контейнери. Для цього створіть нового користувача на кореневому сервері. Не забудьте ввести пароль, інші параметри не потрібні.
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
Створити файл /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 і location.
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може пінгувати, 8.8.8.8але не може пінгувати, 10.100.2.250і що 10.100.2.250може пінгувати, 8.8.8.8але не може пінгувати 10.100.1.200.
Важливий порядок команд, пов’язаних з iptables. Найкращий спосіб працювати зі своїми правилами – це використовувати iptables-persistent. Цей пакет допомагає вам зберігати правила iptables у файлах /etc/iptables/rules.v4і /etc/iptables/rules.v6може автоматично завантажувати їх після перезавантаження системи. Просто встановіть його за допомогою наступного.
apt-get install iptables-persistent
Виберіть, YESколи буде запропоновано.
Штучний інтелект не в майбутньому, він тут прямо в сьогоденні У цьому блозі Прочитайте, як програми штучного інтелекту вплинули на різні сектори.
Ви також стали жертвою DDOS-атак і спантеличені методами запобігання? Прочитайте цю статтю, щоб вирішити свої запитання.
Можливо, ви чули, що хакери заробляють багато грошей, але чи замислювалися ви коли-небудь, як вони заробляють такі гроші? давайте обговоримо.
Ви хочете побачити революційні винаходи Google і як ці винаходи змінили життя кожної людини сьогодні? Тоді читайте в блозі, щоб побачити винаходи Google.
Концепція самокерованих автомобілів, щоб вирушати в дороги за допомогою штучного інтелекту, є мрією, яку ми давно мріємо. Але, незважаючи на кілька обіцянок, їх ніде не видно. Прочитайте цей блог, щоб дізнатися більше…
Оскільки наука розвивається швидкими темпами, бере на себе багато наших зусиль, ризики піддати себе незрозумілій Сингулярності також зростає. Читайте, що може означати для нас сингулярність.
Прочитайте блог, щоб дізнатися про різні шари архітектури великих даних та їх функціональні можливості найпростішим способом.
Методи зберігання даних можуть розвиватися з моменту народження Даних. Цей блог висвітлює еволюцію зберігання даних на основі інфографіки.
У цьому цифровому світі пристрої розумного дому стали важливою частиною життя. Ось кілька дивовижних переваг пристроїв розумного дому щодо того, як вони роблять наше життя гідним життя та спрощують його.
Нещодавно Apple випустила додаткове оновлення macOS Catalina 10.15.4, щоб виправити проблеми, але схоже, що оновлення викликає більше проблем, що призводять до блокування комп’ютерів Mac. Прочитайте цю статтю, щоб дізнатися більше