序章

このチュートリアルでは、DigitalOceanプライベートネットワークでIptablesを使用する方法を説明します。 また、これを実行する理由についても説明し、独自の環境でこれを実装する方法の例を示します。 このチュートリアルの例では、構成を自分のニーズに適合させることができるように概念を説明します。

DigitalOceanのプライベートネットワークオプションは、VPSに2番目のネットワークインターフェイスを付与します。これは、同じデータセンターにある同じアカウントでプロビジョニングされた他のサーバーにのみアクセスできます。 つまり、Dropletのプライベートインターフェイスを介して送信されるデータには、チームのメンバーまたはDOパスワードにアクセスできるユーザーのみがアクセスできます。

注:このチュートリアルでは、IPv4セキュリティについて説明します。 Linuxでは、IPv6のセキュリティはIPv4とは別に維持されます。 たとえば、iptablesはIPv4アドレスのファイアウォールルールのみを維持しますが、ip6tablesと呼ばれるIPv6の対応物があり、IPv6ネットワークアドレスのファイアウォールルールを維持するために使用できます。

VPSがIPv6用に構成されている場合は、IPv4とIPv6の両方のネットワークインターフェイスを適切なツールで保護することを忘れないでください。 IPv6ツールの詳細については、次のガイドを参照してください。 LinuxVPSでIPv6を使用するようにツールを構成する方法

シナリオ例

この例では、次のチュートリアルで作成された環境を使用します: Ubuntu14.04でMySQLレプリケーションを使用してWordPressのパフォーマンスを最適化する方法。

これは、環境がどのように見えるかの図です。

Shared Private Network

サンプル環境は5つのVPSを使用します(そしてiptablesは構成されていません):

  • haproxy-www :リバースプロキシロードバランサー
  • wordpress-1 :最初のアプリケーションサーバー
  • wordpress-2 :2番目のアプリケーションサーバー
  • mysql-1 :マスターMySQLデータベースサーバー
  • mysql-2 :スレーブMySQLデータベースサーバー

セットアップがこのように見えない場合でも、フォローできるはずです。 また、プライベートネットワークまたはiptablesの基本を使用したVPSの設定について詳しく知りたい場合は、次のリンクが役立ちます(このチュートリアルでは、iptablesの基本を理解していることを前提としています)。

すでに概念に精通していて、iptablesのセットアップを確認したい場合は、Iptables構成の概要セクションに進んでください。

私たちの目標

このチュートリアルを終了すると、次の図のような環境ができあがります。

Private Network

プライベートネットワークエリア内のすべてのサーバーは、このプライベートネットワーク内の他のサーバーとのみ通信できます(オレンジ色のボックス)。 ロードバランサーはインターネット経由でアクセスでき、プライベートネットワークにもリンクされます。 このポリシーの実施は、各サーバーのiptablesを介して実装されます。

:パブリックインターフェイスへのトラフィックをブロックするには、パブリックインターフェイスを無効にするか、ファイアウォールルールを設定してIptablesで同様の効果を実現します。 ファイアウォールオプションを使用するのは、サーバーが接続を開始するときにサーバーがインターネットにアクセスできるようにしながら、不要なネットワークトラフィックをブロックするように構成できるためです(これは、サーバーに更新をダウンロードする場合などに役立ちます)。

VPSにアクセスする方法

独自のプライベートネットワークをロックダウンする方法に入る前に、サーバーにアクセスするためのさまざまな方法(特にコマンドライン)について説明します。 注意しないと自分のサーバーから自分を締め出すことができるので、サーバーに接続するためのすべての方法を知ることは特に重要です。

DigitalOcean VPSにプライベートネットワークを設定している場合は、次の3つの方法でアクセスできます。

  • パブリックインターフェイス
  • プライベートインターフェース
  • コントロールパネルコンソールアクセス

パブリックインターフェイス

パブリックインターフェイスには、グローバルインターネット経由でアクセスできます。 これは、ロックダウンされていない限り、あなたまたはインターネット上の他の誰もがこのインターフェイスにアクセスできることを意味します。

インターネット経由でアクセスできる必要があるサーバーにはパブリックインターフェイスが必要です。これにより、顧客やユーザーは、提供しているサービスに接続できます(例: Webページまたはアプリケーション)。 ユーザーがアクセスできるようにする必要がある場合、パブリックインターフェイスのIPアドレスは通常、ドメイン名にマッピングされます(例: example.com )DNS経由。

すべてのVPSでは、デフォルトでパブリックインターフェイスが有効になっています。 このチュートリアルでは、iptablesを使用して、アプリケーションが正しく機能するために必要なネットワークトラフィックのみを受け入れるようにパブリックインターフェイスを制限します(つまり、 HTTP)。

プライベートインターフェース

プライベートインターフェイスには、同じプライベートネットワーク上の他のVPSのみがアクセスできます。 DigitalOceanの場合、これは、同じアカウントでプロビジョニングされた他のVPSのみがプライベートインターフェイスにアクセスできることを意味します。

同じアカウントで複数のVPSに接続している場合は、SSH経由で別のVPSのプライベートインターフェイスに接続できます。 たとえば、haproxy-wwwのパブリックインターフェイスにSSHで接続し、そこからmysql-1のプライベートインターフェイスにSSHで接続できます。 これは、iptablesを使用して一部のサーバーのパブリックインターフェイスからSSH接続をドロップする場合に役立ちます。

このチュートリアルでは、プライベートインターフェイスのネットワークトラフィックを、定義された「プライベートネットワーク」(上の図のオレンジ色のボックス)内のVPSとその他の必要なネットワークトラフィック(ロードバランサーとアプリケーションサーバーの間)のみに制限します。 。

コントロールパネルコンソールアクセス

パブリックインターフェイスとプライベートインターフェイスの両方にアクセスできなくなった場合は、コンソールアクセスを介してVPSに接続できます。 現実の世界では、これはキーボード、マウス、モニターをサーバーに直接接続することに似ています。 誤って両方のインターフェイスまたはSSHサービスを無効にした場合でも、この方法でVPSにいつでもアクセスできることを忘れないでください。

:VPSログインがすべてSSHキーで認証されている場合、コンソールからログインするには、コントロールパネルからrootパスワードをリセットする必要があります。

インターフェイス/ポートアクセス要件を特定する

続行する前に、インターフェイスとポートのアクセス要件を決定することが重要です。 多くのアプリケーションはデフォルトのポートを使用するか、特定のインターフェイスとポートにバインドするように構成できます。 ファイアウォールの設定を誤るとアプリケーションが破損する可能性があるため、ポリシーのニーズが確実になるまでiptablesの設定を変更しないでください。

シナリオ例のネットワークアクセスニーズの内訳は次のとおりです。

  • haproxy-www
      インターネット(パブリック)/ポート80 WordPressサーバー(プライベート)/ポート80
  • wordpress-1 :(すべてプライベート)
      haproxy_www/ポート80wordpress-2/さまざまなglusterFSポートMySQLサーバー/ポート3306
  • wordpress-2 :(すべてプライベート)
      haproxy_www/ポート80wordpress-1/さまざまなglusterFSポートMySQLサーバー/ポート3306
  • mysql-1 :(すべてプライベート)
      WordPressサーバー/ポート3306mysql-2/ポート3306
  • mysql-2 :スレーブMySQLデータベースサーバー
      WordPressサーバー/ポート3306mysql-1/ポート3306

また、少なくとも1つのパブリックインターフェイスへのSSH、およびプライベートネットワークエリア上のすべてのサーバー間のSSHを許可する必要があります。 この例では、 tunnel-1 と呼ばれる別のVPSへのパブリックSSHを許可し、他のサーバーではプライベートSSHのみを許可します。他のサーバーの。 技術的には、この目的のために任意の(またはすべての)VPSを使用できます。

ファイアウォールが何を受け入れ、場合によっては削除する必要があるかがわかったので、ファイアウォールの構成に取り掛かりましょう。

Iptables構成の概要

ニーズを満たすためにiptablesを構成する方法の概要は次のとおりです。

  • デフォルトでドロップ
  • プライベートネットワークインターフェイスからtunnel-1VPSへのSSHを許可する
  • サーバーから開始されるインターネットトラフィックを許可する
  • 特定のプライベートネットワークトラフィックを明示的に許可する(IPアドレスやポートによる)

haproxy-wwwから始めましょう。これは私たちの唯一の公開サーバーです。 iptablesコマンドでは、 eth0 はVPSのパブリックインターフェイスを指し、 eth1 はVPSのプライベートインターフェイスを指します。インターフェイス名が異なる場合は、それらに置き換えてください。必要に応じて。

パブリックサーバーの構成(haproxy-www)

トンネル-1へのSSH:

sshユーザー@ tunnel_1_public_IP

ここから、SSHでhaproxy-wwwprivateインターフェースに接続します。

sshユーザー@haproxy_www_private_IP

haproxy-www で、すべてのチェーンのデフォルトをACCEPTに設定し、既存のルールを削除します。

sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -F

tunnel-1がプライベートインターフェイスを介してhaproxy-wwwにSSH接続できるようにします。

sudo iptables -A INPUT -p tcp -s tunnel_1_private_IP --dport 22 -i eth1 -j ACCEPT sudo iptables -A OUTPUT -p tcp -d tunnel_1_private_IP --sport 22 -o eth1 -m state --state ESTABLISHED -j ACCEPT

サーバーでループバックトラフィックを許可します。 これにより、サーバーで127.0.0.1またはlocalhostを使用できるようになります。

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

サーバーから開始されるパブリックトラフィックとプライベートトラフィックを許可します。 これにより、サーバーがインターネットにアクセスして、更新プログラムやソフトウェアのダウンロードなどを実行できるようになります。

sudo iptables -I OUTPUT -o eth0 -d 0.0.0.0/0 -j ACCEPT sudo iptables -I INPUT -i eth0 -m state --state ESTABLISHED、RELATED -j ACCEPT

パブリックインターフェイスですべてのHTTPトラフィック(ポート80)を許可します。 これは、ユーザーがhttp://www.example.com/を介して当社のサイトにアクセスできるようにするために必要です。

sudo iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW、ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED- j受け入れる

両方のWordPressサーバーがプライベートIPアドレスを介してポート80にアクセスできるようにします。

sudo iptables -A INPUT -p tcp -s wordpress_1_private_IP --sport 80 -j ACCEPT sudo iptables -A OUTPUT -p tcp -d wordpress_1_private_IP --dport 80 -j ACCEPT sudo iptables -A INPUT -p tcp -s wordpress_2_private_IP --sport 80 -j ACCEPT sudo iptables -A OUTPUT -p tcp -d wordpress_2_private_IP --dport 80 -j ACCEPT

必要なすべてのネットワークトラフィックを許可したので、各iptablesチェーンのデフォルトの動作としてDROPを設定することにより、他のすべてのトラフィックをドロップできます。

sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP

haproxy-wwwのファイアウォールの構成が完了したので、すべてが正しく機能することを確認する必要があります。 構成に問題がない場合は、次のaptコマンドを使用してiptables-persistentパッケージをインストールすることで構成を保存できます。

sudo apt-get update
sudo apt-get install iptables-persistent

iptables-persistentのインストール中に、現在のファイアウォール設定を保存するかどうかを尋ねられます。 はいと答えます。

これで、haproxy-wwwファイアウォールで次のことが可能になります。

  • プライベートネットワーク経由でトンネル1からSSH
  • ループバックトラフィック
  • haproxy-wwwが開始するインターネットアクティビティ
  • パブリックインターネット上のHTTP
  • それ自体とWordPressアプリケーションサーバー間のHTTP
  • 他のソースからの着信トラフィックはありません

残りのサーバーの保護に移りましょう。

プライベートネットワークサーバーの構成

:残りのすべてのサーバーに対して次のすべての手順を実行します: wordpress-1 wordpress-2 mysql-1 、および[X127X ]mysql-2