在Ubuntu 14.04上安全地部署和管理LXC容器

LXC容器(Linux容器)是Linux中的一种操作系统功能,可用于在单个主机上运行多个隔离的Linux系统。

这些说明将引导您完成隔离Linux容器托管的服务器配置的基本步骤。我们将配置以下功能:

  • 具有Ubuntu 14.LXC容器
  • Linux网络设置和容器的端口转发。
  • 集装箱管理SSH转发一样简单ssh [email protected]ssh [email protected]
  • Nginx代理配置,用于访问容器内的网站(按主机名)。
  • 其他安全性改进,用于适当的服务器管理。

本指南假定:

  • 您在Vultr.com上拥有一个帐户。
  • 您知道如何使用自定义ISO配置虚拟机。
  • 您知道如何使用SSH密钥,并且已经生成了公用密钥和专用密钥。

在本教程的最后,我们将获得两个虚拟容器,这些容器可以访问Internet,但不能相互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

现在,我们需要创建一个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

网络

要在您的容器内提供Internet连接,我们需要启用NAT。下面将允许通过NAT技术将流量从容器转发到Internet。所述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并在其中配置Web服务器。

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从服务器到IP为10.100.0.200的容器的每个HTTP请求。激活此配置。

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 [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端口。然后,我们要使用基本的HTTP验证来保护Proxmox管理页面。

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和letencrypt的帮助下完成此操作。有关更多信息,请单击此处

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:808010.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出现提示时选择。



Leave a Comment

在CentOS 7上使用Docker Swarm(CE)进行粘性会话

在CentOS 7上使用Docker Swarm(CE)进行粘性会话

使用其他系统?简介Docker Swarm将您的单个服务器转变为计算机集群,从而促进扩展,高可用性和扩展性。

通过iPXE安装Rancher OS

通过iPXE安装Rancher OS

Rancher OS是围绕Docker构建的非常轻量级的Linux发行版。操作系统本身的重量约为20MB。本教程将帮助您入门和运行

两种Docker图形化管理工具:DockerUI和Shipyard

两种Docker图形化管理工具:DockerUI和Shipyard

借助Vultr Docker应用程序,您可以轻松地在Vultr服务器实例上部署Docker。同时,您可以方便地进行Docker管理任务

在Ubuntu 18.04上安装Docker CE

在Ubuntu 18.04上安装Docker CE

简介Docker是一个应用程序,可让我们部署作为容器运行的程序。它是用流行的Go编程语言编写的

在RancherOS上安装Rancher Server

在RancherOS上安装Rancher Server

概述RancherOS是一个非常轻量级的操作系统(仅约60 MB),它以PID 0作为运行系统服务的方式运行系统Docker守护程序。

在CoreOS上,设置您自己的Docker注册表

在CoreOS上,设置您自己的Docker注册表

我们都知道并喜欢Docker,这是一个在多台机器上创建,管理和分发应用程序容器的平台。Docker Inc.提供服务

在Debian 9上安装Docker CE

在Debian 9上安装Docker CE

使用其他系统?简介Docker是一个允许在虚拟容器内部署软件的应用程序。它写在G

如何使用Docker:创建第一个Docker容器

如何使用Docker:创建第一个Docker容器

本教程介绍了Docker入门的基础知识。我假设您已经安装了Docker。本教程中的步骤将适用于

使用Docker部署Node.js应用程序

使用Docker部署Node.js应用程序

本文将向您展示如何在Docker容器中部署Node应用程序。注意:本教程假定您已安装Docker并已阅读

Docker的负载均衡

Docker的负载均衡

在运行Web应用程序时,通常希望充分利用资源,而不必转换软件以使用多线程处理程序。

在CentOS 7上安装Rancher

在CentOS 7上安装Rancher

使用其他系统?简介Rancher是一个用于运行容器和构建私有容器服务的开源平台。牧场主是基地

CentOS 7上的Kubernetes入门

CentOS 7上的Kubernetes入门

Kubernetes是Google开发的开放源代码平台,用于跨服务器集群管理容器化应用程序。它以十年为基础

在Alpine Linux 3.9.0上创建Docker Swarm

在Alpine Linux 3.9.0上创建Docker Swarm

简介本指南将向您展示如何使用多个Alpine Linux 3.9.0服务器和Portainer创建和配置Docker群。请注意

在Debian 9上使用Docker Swarm(CE)进行粘性会话

在Debian 9上使用Docker Swarm(CE)进行粘性会话

使用其他系统?简介Docker Swarm将您的单个服务器转变为计算机集群。便于扩展,高可用性和

如何在CentOS 7上安装Harbor

如何在CentOS 7上安装Harbor

Harbor是一个开放源代码的企业级注册服务器,用于存储和分发Docker映像。Harbor扩展了开源Docker Distribution b

在CentOS 7上使用Kubeadm部署Kubernetes

在CentOS 7上使用Kubeadm部署Kubernetes

概述本文旨在帮助您立即建立Kubernetes集群并使用kubeadm运行。本指南将在以下位置部署两台服务器

使用Docker在CentOS 7上开始使用SQL Server 2017(MS-SQL)

使用Docker在CentOS 7上开始使用SQL Server 2017(MS-SQL)

前提条件Docker引擎1.8+。至少4GB的磁盘空间。至少4GB的RAM。步骤1.安装Docker为了安装SQL-Server,Docker mus

在Ubuntu 14.04上安装Docker

在Ubuntu 14.04上安装Docker

使用其他系统?Docker是一个允许部署作为容器运行的程序的应用程序。它是用流行的Go程序编写的

使用Docker-compose部署PHP应用程序

使用Docker-compose部署PHP应用程序

PHP应用程序通常由Web服务器,关系数据库系统和语言解释器本身组成。在本教程中,我们将继续学习

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

什麼是日誌文件系統,它是如何工作的?

什麼是日誌文件系統,它是如何工作的?

我們的計算機以稱為日誌文件系統的有組織的方式存儲所有數據。這是一種有效的方法,可以讓計算機在您點擊搜索時立即搜索和顯示文件。 https://wethegeek.com/?p=94116&preview=true

技術奇點:人類文明的遙遠未來?

技術奇點:人類文明的遙遠未來?

隨著科學的快速發展,接管了我們的大量工作,我們陷入無法解釋的奇點的風險也在增加。閱讀,奇點對我們意味著什麼。

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

2021 年人工智能對醫療保健的影響

2021 年人工智能對醫療保健的影響

過去幾十年,醫療保健領域的人工智能取得了巨大飛躍。因此,醫療保健中人工智能的未來仍在日益增長。