序章

あるサーバーから別のサーバーに移行する場合、プロセスの一部としてiptablesファイアウォールルールを移行することが望ましい場合がよくあります。 このチュートリアルでは、アクティブなiptablesルールセットをあるサーバーから別のサーバーに簡単にコピーする方法を説明します。

前提条件

このチュートリアルには2台のサーバーが必要です。 既存のiptablesルールを持つソースサーバーをServerAと呼びます。 ルールが移行される移行先サーバーは、サーバーBと呼ばれます。

また、スーパーユーザー、つまりsudoが両方のサーバーにアクセスできるようにする必要があります。

既存のIptablesルールを表示する

iptablesルールを移行する前に、それらが何に設定されているかを見てみましょう。 サーバーAで次のコマンドを使用してこれを行うことができます。

  1. sudo iptables -S
Example output:
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -s 15.15.15.51/32 -j DROP

上記のルール例は、ファイアウォールの移行プロセスを示すために使用されます。

Iptablesルールのエクスポート

iptables-saveコマンドは、現在のiptablesルールをstdout(標準出力)に書き込みます。 これにより、stdoutをファイルにリダイレクトすることで、ファイアウォールルールをファイルにエクスポートする簡単な方法が得られます。

移行するiptablesルールがあるサーバーAで、iptables-saveを使用して、現在のルールを次のように「iptables-export」という名前のファイルにエクスポートします。

  1. cd ~
  2. sudo iptables-save > iptables-export

これにより、ホームディレクトリにiptables-exportファイルが作成されます。 このファイルを別のサーバーで使用して、ファイアウォールルールをiptablesにロードできます。

ファイルの内容を表示(オプション)

ファイルの内容を簡単に見てみましょう。 catコマンドを使用して、端末に出力します。

  1. cat iptables-export
iptables-export contents:
# Generated by iptables-save v1.4.21 on Tue Sep 1 17:32:29 2015 *filter :INPUT ACCEPT [135:10578] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [8364:1557108] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -s 15.15.15.51/32 -j DROP COMMIT # Completed on Tue Sep 1 17:32:29 2015

ご覧のとおり、ファイルにはアクティブなiptablesルールの構成が含まれています。 これで、このファイルを宛先サーバーサーバーBにコピーする準備が整いました。

エクスポートされたルールを宛先サーバーにコピーする

ルールファイルを宛先サーバーサーバーBにコピーする必要があります。 これを行う最も簡単な方法は、scpを使用するか、ファイルの内容をサーバーB上の新しいファイルにコピーして貼り付けることです。 scpを使用して、ネットワーク経由で/tmpディレクトリにファイルをコピーする方法を示します。

サーバーAで、このscpコマンドを実行します。 強調表示された部分をサーバーのログインとIPアドレスに置き換えてください。

  1. scp iptables-export user@server_b_ip_address:/tmp

適切な認証を提供した後、ファイルはサーバーBの/tmpディレクトリにコピーされます。 /tmpの内容は再起動時に削除されることに注意してください。保存したい場合は、別の場所に自由に配置してください。

Iptablesルールのインポート

宛先サーバーにエクスポートされたルールを使用して、それらをiptablesにロードできます。 ただし、状況によっては、ファイル内のルールを新しいIPアドレスと範囲で更新し、場合によってはインターフェイス名を更新することもできます。 ロードする前にルールを変更したい場合は、必ず/tmp/iptables-exportファイルを編集してください。

iptables-exportファイルからiptablesにルールをロードする準備ができたら、iptables-restoreコマンドを使用してロードしましょう。

宛先サーバーであるサーバーBで、次のコマンドを実行してファイアウォールルールをロードします。

  1. sudo iptables-restore < /tmp/iptables-export

これにより、ルールがiptablesにロードされます。 これは、sudo iptables -Sコマンドで確認できます。

ルールを保存

Iptablesルールは一時的なものであるため、再起動後も存続するように特別な注意を払う必要があります。この手順は、サーバーBで実行することをお勧めします。 UbuntuとCentOSの両方でルールを保存する方法を紹介します。

Ubuntu

Ubuntuでは、iptablesルールを保存して再起動後も存続させるための最も簡単な方法は、iptables-persistentパッケージを使用することです。 apt-getで次のようにインストールします。

  1. sudo apt-get install iptables-persistent

インストール中に、現在のファイアウォールルールを保存するかどうかを尋ねられます。 現在のルールセットを保存する場合は、yesと応答します。

将来ファイアウォールルールを更新し、変更を保存する場合は、次のコマンドを実行します。

  1. sudo invoke-rc.d iptables-persistent save

CentOS6以前

CentOS 6以前(CentOS 7はデフォルトでFirewallDを使用)では、iptablesinitスクリプトを使用してiptablesルールを保存できます。

  1. sudo service iptables save

これにより、現在のiptablesルールが/etc/sysconfig/iptablesファイルに保存され、起動時にiptablesによってロードされます。

結論

おめでとう! ファイアウォールルールが元のサーバーから新しいサーバーに移行されました。