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 키를 사용하는 방법을 알고 있으며 공개 및 개인 키를 이미 생성했습니다.

튜토리얼이 끝나면 인터넷에 액세스 할 수 있지만 서로 핑할 수없는 두 개의 가상 컨테이너가 생깁니다. 또한 example.com컨테이너 에서 포트 포워딩을 구성 할 것 입니다. Proxmox 패킷의 도구를 사용하여 보안 구성 및 관리 패널을 배포합니다.

준비

LXC 컨테이너 관리에만 Proxmox를 사용합니다. 일반적으로 KVM도 지원하지만 Vultr에서는 중첩 가상화가 금지되어 있습니다. 시작하기 전에 공식 웹 사이트에서 Proxmox ISO를 다운로드해야합니다. 우리는를 사용할 것 Proxmox VE 5.0 ISO Installer입니다. 기본 설정으로 이미지에서 OS를 설치하고 가상 머신을 재부팅하십시오. 또한 소스에서 proxmox를 수동으로 설치할 수 있지만 대부분의 경우에는 필요하지 않습니다 ( 여기 의 지시 사항을 따르십시오 ).

OS 설정

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 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서버에서 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 및 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
}

Htpasswd 생성기를/etc/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캔 핑을 8.8.8.8하지만 핑 (ping) 할 수없는 10.100.2.25010.100.2.250캔 핑 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프롬프트가 표시되면 선택하십시오 .



Alpine Linux 3.9.0에서 Docker Swarm 생성

Alpine Linux 3.9.0에서 Docker Swarm 생성

소개이 안내서는 여러 개의 Alpine Linux 3.9.0 서버 및 Portainer를 사용하여 Docker 스웜을 생성 및 구성하는 방법을 보여줍니다. 그쪽으로 알아주십시오

RancherOS에 Rancher 서버 설치

RancherOS에 Rancher 서버 설치

RancherOS는 시스템 서비스를 실행하기 위해 시스템 Docker 데몬을 PID 0으로 실행하는 매우 가벼운 운영 체제 (약 60MB)입니다.

Docker-compose를 사용하여 PHP 응용 프로그램 배포

Docker-compose를 사용하여 PHP 응용 프로그램 배포

PHP 응용 프로그램은 일반적으로 웹 서버, 관계형 데이터베이스 시스템 및 언어 인터프리터 자체로 구성됩니다. 이 튜토리얼에서 우리는 활용할 것입니다

Ubuntu 18.04에 Docker CE 설치

Ubuntu 18.04에 Docker CE 설치

소개 Docker는 컨테이너로 실행되는 프로그램을 배포 할 수있는 응용 프로그램입니다. 인기있는 Go 프로그래밍 언어로 작성되었습니다.

Ubuntu 14.04에 Docker 설치

Ubuntu 14.04에 Docker 설치

다른 시스템을 사용하십니까? Docker는 컨테이너로 실행되는 프로그램을 배포 할 수있는 응용 프로그램입니다. 인기있는 Go 프로그램에서 작성되었습니다.

Docker를 사용하여 Node.js 애플리케이션 배포

Docker를 사용하여 Node.js 애플리케이션 배포

이 기사에서는 Docker 컨테이너 내에 Node 응용 프로그램을 배포하는 방법을 보여줍니다. 참고 :이 튜토리얼은 Docker가 설치되어 있고 읽은 것으로 가정합니다.

CentOS 7에 Harbor를 설치하는 방법

CentOS 7에 Harbor를 설치하는 방법

Harbor는 Docker 이미지를 저장하고 배포하는 오픈 소스 엔터프라이즈 급 레지스트리 서버입니다. 하버, 오픈 소스 Docker Distribution b 확장

CentOS 7에서 Kubernetes 시작하기

CentOS 7에서 Kubernetes 시작하기

Kubernetes는 서버 클러스터 전체에서 컨테이너화 된 애플리케이션을 관리하기 위해 Google에서 개발 한 오픈 소스 플랫폼입니다. 그것은 10 년을 기반으로하고

우분투 16.04에 Rancher 설치

우분투 16.04에 Rancher 설치

다른 시스템을 사용하십니까? 소개 Rancher는 컨테이너를 실행하고 개인 컨테이너 서비스를 구축하기위한 오픈 소스 플랫폼입니다. 목장주 기지

CentOS 7에서 Kubeadm으로 Kubernetes 배포

CentOS 7에서 Kubeadm으로 Kubernetes 배포

개요이 기사는 Kubernetes 클러스터를 kubeadm과 함께 시작하고 실행하는 데 도움을주기 위해 작성되었습니다. 이 가이드는 두 대의 서버를 배포합니다.

CoreOS에 docker-compose 설치

CoreOS에 docker-compose 설치

이 기사에서는 CoreOS에 docker-compose를 설치하는 방법에 대해 설명합니다. CoreOS에서는 / usr / 폴더를 변경할 수 없으므로 표준 / usr / local / bin 경로를 사용할 수 없습니다.

CentOS 7에 Rancher 설치

CentOS 7에 Rancher 설치

다른 시스템을 사용하십니까? 소개 Rancher는 컨테이너를 실행하고 개인 컨테이너 서비스를 구축하기위한 오픈 소스 플랫폼입니다. 목장주 기지

CentOS 7에 Docker 설치

CentOS 7에 Docker 설치

다른 시스템을 사용하십니까? Docker는 가상 컨테이너 내에 소프트웨어를 배포 할 수있는 응용 프로그램입니다. Go 프로그램에서 작성되었습니다.

CentOS 7에서 Docker Swarm (CE)을 사용한 고정 세션

CentOS 7에서 Docker Swarm (CE)을 사용한 고정 세션

다른 시스템을 사용하십니까? Docker Swarm은 개별 서버를 컴퓨터 클러스터로 전환하여 확장 및 고 가용성을 용이하게합니다.

데비안 9의 Docker Swarm (CE)과의 끈적한 세션

데비안 9의 Docker Swarm (CE)과의 끈적한 세션

다른 시스템을 사용하십니까? Docker Swarm은 개별 서버를 컴퓨터 클러스터로 전환합니다. 스케일링, 고 가용성

Docker 사용 방법 : 첫 번째 Docker 컨테이너 만들기

Docker 사용 방법 : 첫 번째 Docker 컨테이너 만들기

이 튜토리얼은 Docker 시작의 기본 사항을 설명합니다. Docker가 이미 설치되어 있다고 가정합니다. 이 튜토리얼의 단계는

Docker를 사용한로드 밸런싱

Docker를 사용한로드 밸런싱

웹 응용 프로그램을 실행할 때 일반적으로 멀티 스레딩을 사용하도록 소프트웨어를 변환하지 않고도 리소스를 최대한 활용하려고합니다.

CoreOS에서 고유 한 Docker 레지스트리 설정

CoreOS에서 고유 한 Docker 레지스트리 설정

우리는 여러 시스템에서 애플리케이션 컨테이너를 생성, 관리 및 배포 할 수있는 플랫폼 인 Docker를 알고 있습니다. Docker Inc.는 서비스를 제공합니다

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

AI가 랜섬웨어 공격의 증가와 싸울 수 있습니까?

AI가 랜섬웨어 공격의 증가와 싸울 수 있습니까?

랜섬웨어 공격이 증가하고 있지만 AI가 최신 컴퓨터 바이러스를 처리하는 데 도움이 될 수 있습니까? AI가 답인가? AI boone 또는 bane인지 여기에서 읽으십시오.

ReactOS: 이것이 Windows의 미래입니까?

ReactOS: 이것이 Windows의 미래입니까?

오픈 소스이자 무료 운영 체제인 ReactOS가 최신 버전과 함께 제공됩니다. 현대 Windows 사용자의 요구 사항을 충족하고 Microsoft를 무너뜨릴 수 있습니까? 이 구식이지만 더 새로운 OS 환경에 대해 자세히 알아보겠습니다.

WhatsApp 데스크톱 앱 24*7을 통해 연결 유지

WhatsApp 데스크톱 앱 24*7을 통해 연결 유지

Whatsapp은 마침내 Mac 및 Windows 사용자용 데스크톱 앱을 출시했습니다. 이제 Windows 또는 Mac에서 Whatsapp에 쉽게 액세스할 수 있습니다. 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가지 상용 데이터 추출 도구

빅데이터의 13가지 상용 데이터 추출 도구

빅데이터의 13가지 상용 데이터 추출 도구

저널링 파일 시스템이란 무엇이며 어떻게 작동합니까?

저널링 파일 시스템이란 무엇이며 어떻게 작동합니까?

우리 컴퓨터는 모든 데이터를 저널링 파일 시스템이라고 하는 체계적인 방식으로 저장합니다. 검색을 누르는 즉시 컴퓨터에서 파일을 검색하고 표시할 수 있는 효율적인 방법입니다.https://wethegeek.com/?p=94116&preview=true

기술적 특이점: 인류 문명의 먼 미래?

기술적 특이점: 인류 문명의 먼 미래?

과학이 빠른 속도로 발전하고 우리의 많은 노력을 인수함에 따라 설명할 수 없는 특이점에 처할 위험도 높아집니다. 특이점이 우리에게 무엇을 의미할 수 있는지 읽어보십시오.

26가지 빅 데이터 분석 기법에 대한 통찰: 1부

26가지 빅 데이터 분석 기법에 대한 통찰: 1부

26가지 빅 데이터 분석 기법에 대한 통찰: 1부

2021년 의료 분야에서 인공 지능의 영향

2021년 의료 분야에서 인공 지능의 영향

의료 분야의 AI는 지난 수십 년 동안 큰 도약을 했습니다. 따라서 의료 분야에서 AI의 미래는 여전히 나날이 성장하고 있습니다.