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

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

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

CentOS 7サーバーにApache 2.4をインストールする方法を説明します。安定したウェブサーバーを構築するための前提条件と手順を解説します。

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1におけるBlacklistdのインストール方法について詳しく解説します。この方法を通じて、強力なセキュリティ対策を実装できます。

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

サーバーマネージャーを使用して、Windows Serverの管理が向上します。セキュリティリスクを軽減し、効率的な管理を実現します。

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法。Seafile(コミュニティバージョン)は、ownCloudに似た無料のオープンソースファイル同期および共有ソリューションです。

DebianでSnortを設定する方法

DebianでSnortを設定する方法

Snortは無料のネットワーク侵入検知システムです。最新の方法で、SnortをDebianにインストールし、設定する手順を紹介します。ネットワークのセキュリティを強化しましょう。

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールし、ログ管理を行う方法を学びます。

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsサーバーでWebサイトを実行している場合、電子メールも受信できるようにするためにhMailServerを使用する方法を解説します。

Ubuntu 19.04にFiveMサーバーをインストールする方法

Ubuntu 19.04にFiveMサーバーをインストールする方法

FiveMサーバーをUbuntu 19.04にインストールするための詳細なガイド。必要条件からインストール、起動、トラブルシューティングまで、すべてのステップを含みます。

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

Debian 10にWebDAVをデプロイする方法を学び、WsgiDAVとSSL証明書で安全な接続を実現しましょう。

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

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

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