Ubuntu 14.04でのLXCコンテナの安全なデプロイと管理

LXCコンテナー(Linuxコンテナー)は、単一のホスト上で複数の分離されたLinuxシステムを実行するために使用できるLinuxのオペレーティングシステム機能です。

これらの手順では、隔離されたLinuxコンテナをホストするためのサーバー構成の基本的な手順を説明します。次の機能を設定します。

  • Ubuntu 14でのLXCコンテナー。
  • コンテナのLinuxネットワーク設定とポート転送。
  • ssh [email protected]およびと同じくらい簡単なコンテナー管理のためのSSH転送ssh [email protected]
  • コンテナー内のWebサイトに(ホスト名で)アクセスするためのNginxプロキシ構成。
  • 適切なサーバー管理のためのセキュリティ強化。

このガイドでは、次のことを前提としています。

  • Vultr.comにアカウントを持っています。
  • カスタムISOで仮想マシンを構成する方法を知っています。
  • SSH鍵の使用方法を知っており、すでに公開鍵と秘密鍵を生成している。

チュートリアルの最後に、インターネットにアクセスできるが、相互にpingできない2つの仮想コンテナーを取得します。example.comからコンテナへのポート転送も設定します。Proxmoxパケットのツールを使用して、安全な構成と管理パネルを展開します。

準備

LXCコンテナの管理にのみProxmoxを使用します。一般に、KVMもサポートしていますが、Vultrではネストされた仮想化は禁止されています。開始する前に、Proxmox ISOを公式Webサイトからダウンロードする必要があります。を使用し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

次に、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内部にWebサーバーを構成します。

apt-get update
apt-get install nginx
service nginx start
exit

次に、サーバー上でNginxを構成して、Webサイトをコンテナーにプロキシする必要があります。

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アクセス

サンドボックスに簡単にアクセスできるようにする場合は、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: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
    

    コメントを外します。

    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.200pingできるがping 8.8.8.8できないこと10.100.2.250、およびpingできるがping できないことを確認します。10.100.2.2508.8.8.810.100.1.200

iptablesに関連するコマンドの順序は重要です。ルールを操作する最良の方法は、を使用することiptables-persistentです。このパッケージは、ファイルにiptablesのルールを保存するのに役立ちます/etc/iptables/rules.v4/etc/iptables/rules.v6、それは自動的にシステムの再起動後にそれらをロードすることができます。以下のようにインストールするだけです。

apt-get install iptables-persistent

YESプロンプトが表示されたら選択します。



Leave a Comment

RancherOSにRancherサーバーをインストールする

RancherOSにRancherサーバーをインストールする

概要RancherOSは、システムサービスを実行するためのPID 0としてシステムDockerデーモンを実行する、信じられないほど軽量なオペレーティングシステム(わずか約60 MB)です。

Ubuntu 18.04にDocker CEをインストールする

Ubuntu 18.04にDocker CEをインストールする

はじめにDockerは、コンテナーとして実行されるプログラムをデプロイできるアプリケーションです。それは人気のあるGoプログラミング言語で書かれました

Ubuntu 14.04へのDockerのインストール

Ubuntu 14.04へのDockerのインストール

別のシステムを使用していますか?Dockerは、コンテナーとして実行されるプログラムをデプロイできるアプリケーションです。それは人気のある囲碁programminで書かれました

Dockerを使用してNode.jsアプリケーションをデプロイする

Dockerを使用してNode.jsアプリケーションをデプロイする

この記事では、Dockerコンテナー内にノードアプリケーションをデプロイする方法を示します。注:このチュートリアルでは、Dockerがインストールされており、

Alpine Linux 3.9.0でDocker Swarmを作成する

Alpine Linux 3.9.0でDocker Swarmを作成する

はじめにこのガイドでは、複数のAlpine Linux 3.9.0サーバーとPortainerを使用してDockerスウォームを作成および構成する方法について説明します。ご注意ください

CentOS 7にHarbourをインストールする方法

CentOS 7にHarbourをインストールする方法

Harbourは、Dockerイメージを格納および配布するオープンソースのエンタープライズクラスのレジストリサーバーです。HarbourはオープンソースのDockerディストリビューションを拡張しますb

CentOS 7でKubernetesを使ってみる

CentOS 7でKubernetesを使ってみる

Kubernetesは、サーバーのクラスタ全体でコンテナ化されたアプリケーションを管理するためにGoogleが開発したオープンソースのプラットフォームです。それは10年に基づいて構築され、

Ubuntu 16.04にRancherをインストールする

Ubuntu 16.04にRancherをインストールする

別のシステムを使用していますか?はじめにRancherは、コンテナーを実行し、プライベートコンテナーサービスを構築するためのオープンソースプラットフォームです。牧場主がベース

CentOS 7にKubeadmを使用してKubernetesをデプロイする

CentOS 7にKubeadmを使用してKubernetesをデプロイする

概要この記事は、kubernetesクラスターをkubeadmですぐに稼働できるようにすることを目的としています。このガイドでは、2台のサーバーを

CoreOSへのdocker-composeのインストール

CoreOSへのdocker-composeのインストール

この記事では、CoreOSにdocker-composeをインストールする方法について説明します。CoreOSでは、/ usr /フォルダーは不変なので、標準の/ usr / local / binパスは使用できません。

CentOS 7にRancherをインストールする

CentOS 7にRancherをインストールする

別のシステムを使用していますか?はじめにRancherは、コンテナーを実行し、プライベートコンテナーサービスを構築するためのオープンソースプラットフォームです。牧場主がベース

Docker-composeを使用してPHPアプリケーションをデプロイする

Docker-composeを使用してPHPアプリケーションをデプロイする

PHPアプリケーションは通常、Webサーバー、リレーショナルデータベースシステム、および言語インタープリター自体で構成されます。このチュートリアルでは、レバラギンになります

CentOS 7へのDockerのインストール

CentOS 7へのDockerのインストール

別のシステムを使用していますか?Dockerは、仮想コンテナー内でのソフトウェアのデプロイメントを可能にするアプリケーションです。それは囲碁プログラムで書かれました

Ubuntu 16.04でDockerを介してSentryをセットアップする

Ubuntu 16.04でDockerを介してSentryをセットアップする

別のシステムを使用していますか?はじめにSentryは、エラー追跡のためのオープンソースのソリューションです。Sentryは例外やその他の有用なメッセージをあちこちで追跡します

Debian 9でのDocker Swarm(CE)とのスティッキーセッション

Debian 9でのDocker Swarm(CE)とのスティッキーセッション

別のシステムを使用していますか?はじめにDocker Swarmは、個々のサーバーをコンピューターのクラスターに変えます。スケーリング、高可用性、

Dockerの使用方法:最初のDockerコンテナーの作成

Dockerの使用方法:最初のDockerコンテナーの作成

このチュートリアルでは、Dockerの基本的な使い方について説明します。Dockerがすでにインストールされていると思います。このチュートリアルの手順は、

Dockerによる負荷分散

Dockerによる負荷分散

Webアプリケーションを実行する場合、通常、マルチスレッドを使用するようにソフトウェアを変換することなく、リソースを最大限に活用したいと思いますo

CoreOSで、独自のDockerレジストリをセットアップする

CoreOSで、独自のDockerレジストリをセットアップする

私たちは皆、アプリケーションコンテナーを作成、管理、および複数のマシンに分散するプラットフォームであるDockerを知っています。Docker Inc.が提供するサービスt

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

ヘルスケア2021における人工知能の影響

ヘルスケア2021における人工知能の影響

ヘルスケアにおけるAIは、過去数十年から大きな飛躍を遂げました。したがって、ヘルスケアにおけるAIの未来は、日々成長を続けています。

macOS Catalina 10.15.4サプリメントの更新により、解決するよりも多くの問題が発生しています

macOS Catalina 10.15.4サプリメントの更新により、解決するよりも多くの問題が発生しています

最近、Appleは問題を修正するための補足アップデートであるmacOS Catalina 10.15.4をリリースしましたが、このアップデートにより、Macマシンのブリックにつながる問題がさらに発生しているようです。詳細については、この記事をお読みください

原子力が必ずしも悪ではないことを証明する5つの例

原子力が必ずしも悪ではないことを証明する5つの例

原子力は、過去の出来事のために私たちが決して尊重しないことを常に軽蔑していますが、それは必ずしも悪ではありません。詳細については、投稿をお読みください。

AIはどのようにしてプロセス自動化を次のレベルに引き上げることができますか?

AIはどのようにしてプロセス自動化を次のレベルに引き上げることができますか?

これを読んで、人工知能が小規模企業の間でどのように人気を博しているか、そして人工知能がどのように成長し、競合他社に優位に立つ可能性を高めているかを理解してください。

ジャーナリングファイルシステムとは何ですか、そしてそれはどのように機能しますか?

ジャーナリングファイルシステムとは何ですか、そしてそれはどのように機能しますか?

私たちのコンピューターは、ジャーナリングファイルシステムと呼ばれる組織化された方法ですべてのデータを保存します。これは、検索を押すとすぐにコンピューターがファイルを検索して表示できるようにする効率的な方法です。https://wethegeek.com/?p = 94116&preview = true

ビッグデータは人工知能をどのように変えていますか?

ビッグデータは人工知能をどのように変えていますか?

ビッグデータと人工知能は流行語ですが、それらがどのように相互に関連しているか知っていますか?さて、この記事を最後まで読んで、同じことを知ってください。

LiteCartショッピングカートプラットフォームをUbuntu 16.04にインストールする方法

LiteCartショッピングカートプラットフォームをUbuntu 16.04にインストールする方法

LiteCartは、PHP、jQuery、およびHTML 5で記述された無料のオープンソースのショッピングカートプラットフォームです。シンプルで軽量、使いやすいeコマースソフトウォー

DebianでNFS共有をセットアップする

DebianでNFS共有をセットアップする

NFSはネットワークベースのファイルシステムであり、コンピューターはコンピューターネットワークを介してファイルにアクセスできます。このガイドでは、NFを介してフォルダーを公開する方法について説明します

Fedora 28にMatomo Analyticsをインストールする方法

Fedora 28にMatomo Analyticsをインストールする方法

別のシステムを使用していますか?Matomo(旧Piwik)は、Google Analyticsのオープンな代替手段であるオープンソースの分析プラットフォームです。Matomoのソースはoでホストされています

UbuntuでNginxをセットアップしてライブHLSビデオをストリーミングする

UbuntuでNginxをセットアップしてライブHLSビデオをストリーミングする

HTTPライブストリーミング(HLS)は、Apple Inc.によって実装された非常に堅牢なストリーミングビデオプロトコルです。HLSは、ファイアウォール、プロキシ、