ปรับใช้และจัดการคอนเทนเนอร์ 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 และคุณได้สร้างกุญแจสาธารณะและกุญแจส่วนตัวแล้ว

ในตอนท้ายของบทช่วยสอนเราจะได้รับตู้เสมือนสองตู้ที่สามารถเข้าถึงอินเทอร์เน็ตได้ แต่ไม่สามารถ ping ซึ่งกันและกันได้ เราจะกำหนดค่าการส่งต่อพอร์ตจาก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

ตอนนี้เราจำเป็นต้องสร้างคอนเทนเนอร์ลินุกซ์ด้วยอินเตอร์เฟสเครือข่ายที่เชื่อมต่อกับบริดจ์ลินุกซ์ เปิด/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 200ip 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 ไปยังคอนเทนเนอร์ ในการทำเช่นนั้นให้สร้างผู้ใช้ใหม่บนเซิร์ฟเวอร์รูทของคุณ อย่าลืมใส่รหัสผ่านพารามิเตอร์อื่น ๆ ไม่จำเป็น

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

จากนั้นคุณสามารถเชื่อมต่อกับ sandbox ของคุณด้วย 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 ของคุณ ตัวอย่างเช่นสามารถทำได้ด้วยความช่วยเหลือของใบรับรองและ 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 คุณต้องเชื่อมต่อแต่ละคอนเทนเนอร์เข้ากับบริดจ์ส่วนบุคคลและปิดใช้งานการส่งต่อระหว่างบริดจ์

  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
    

    Uncomment มัน

    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 200pct 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แต่ไม่สามารถ 10.100.1.200ping

ลำดับของคำสั่งที่เกี่ยวข้องกับ iptables เป็นสิ่งสำคัญ iptables-persistentวิธีที่ดีที่สุดที่จะดำเนินการกฎของคุณคือการใช้ แพ็คเกจนี้ช่วยให้คุณบันทึกกฎ iptables ลงในไฟล์/etc/iptables/rules.v4และ/etc/iptables/rules.v6สามารถโหลดได้โดยอัตโนมัติหลังจากรีบูตระบบ เพียงแค่ติดตั้งกับสิ่งต่อไปนี้

apt-get install iptables-persistent

เลือกYESเมื่อได้รับแจ้ง

ฝากความเห็น

วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7 LAMP VPS

วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7 LAMP VPS

เรียนรู้วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7; ระบบการจัดการเนื้อหา Headless ที่มีความยืดหยุ่นสูงและปลอดภัย

ตั้งค่า Nginx บน Ubuntu เพื่อสตรีมวิดีโอสด HLS

ตั้งค่า Nginx บน Ubuntu เพื่อสตรีมวิดีโอสด HLS

เรียนรู้วิธีการตั้งค่า Nginx บน Ubuntu สำหรับการสตรีมวิดีโอสด HLS ด้วยคำแนะนำที่ชัดเจนและเป็นประโยชน์

การสำรองข้อมูลยอดนิยมด้วย Percona XtraBackup บนแอพ WordPress แบบคลิกเดียว

การสำรองข้อมูลยอดนิยมด้วย Percona XtraBackup บนแอพ WordPress แบบคลิกเดียว

เรียนรู้การใช้ Percona XtraBackup สำหรับการสำรองข้อมูลด้วยวิธีที่เป็นระบบและง่ายดายบน WordPress ออนไลน์ของคุณ

ReactOS: นี่คืออนาคตของ Windows หรือไม่?

ReactOS: นี่คืออนาคตของ Windows หรือไม่?

ReactOS ซึ่งเป็นโอเพ่นซอร์สและระบบปฏิบัติการฟรีพร้อมเวอร์ชันล่าสุดแล้ว สามารถตอบสนองความต้องการของผู้ใช้ Windows ยุคใหม่และล้ม Microsoft ได้หรือไม่? มาหาข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบเก่านี้ แต่เป็นประสบการณ์ OS ที่ใหม่กว่ากัน

AI สามารถต่อสู้กับการโจมตีของแรนซัมแวร์ที่เพิ่มขึ้นได้หรือไม่

AI สามารถต่อสู้กับการโจมตีของแรนซัมแวร์ที่เพิ่มขึ้นได้หรือไม่

การโจมตีของ Ransomware กำลังเพิ่มขึ้น แต่ AI สามารถช่วยจัดการกับไวรัสคอมพิวเตอร์ตัวล่าสุดได้หรือไม่? AI คือคำตอบ? อ่านที่นี่รู้ว่า AI boone หรือ bane

เชื่อมต่อผ่าน WhatsApp Desktop App 24*7

เชื่อมต่อผ่าน WhatsApp Desktop App 24*7

ในที่สุด Whatsapp ก็เปิดตัวแอพเดสก์ท็อปสำหรับผู้ใช้ Mac และ Windows ตอนนี้คุณสามารถเข้าถึง Whatsapp จาก Windows หรือ Mac ได้อย่างง่ายดาย ใช้ได้กับ Windows 8+ และ Mac OS 10.9+

AI จะนำกระบวนการอัตโนมัติไปสู่อีกระดับได้อย่างไร

AI จะนำกระบวนการอัตโนมัติไปสู่อีกระดับได้อย่างไร

อ่านข้อมูลนี้เพื่อทราบว่าปัญญาประดิษฐ์กำลังได้รับความนิยมในหมู่บริษัทขนาดเล็กอย่างไร และเพิ่มโอกาสในการทำให้พวกเขาเติบโตและทำให้คู่แข่งได้เปรียบ

การอัปเดตเสริม macOS Catalina 10.15.4 ทำให้เกิดปัญหามากกว่าการแก้ปัญหา

การอัปเดตเสริม macOS Catalina 10.15.4 ทำให้เกิดปัญหามากกว่าการแก้ปัญหา

เมื่อเร็ว ๆ นี้ Apple เปิดตัว macOS Catalina 10.15.4 การอัปเดตเสริมเพื่อแก้ไขปัญหา แต่ดูเหมือนว่าการอัปเดตทำให้เกิดปัญหามากขึ้นที่นำไปสู่การสร้างเครื่อง Mac อ่านบทความนี้เพื่อเรียนรู้เพิ่มเติม

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

ระบบไฟล์บันทึกคืออะไรและทำงานอย่างไร

ระบบไฟล์บันทึกคืออะไรและทำงานอย่างไร

คอมพิวเตอร์ของเราจัดเก็บข้อมูลทั้งหมดในลักษณะที่เรียกว่าระบบไฟล์บันทึก เป็นวิธีการที่มีประสิทธิภาพที่ช่วยให้คอมพิวเตอร์สามารถค้นหาและแสดงไฟล์ได้ทันทีที่คุณกดค้นหาhttps://wethegeek.com/?p=94116&preview=true