Iptablesファイアウォールルールを新しいサーバーに移行する方法

提供:Dev Guides
移動先:案内検索

序章

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

前提条件

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

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

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

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

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」という名前のファイルにエクスポートします。

cd ~
sudo iptables-save > iptables-export

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

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

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

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アドレスに置き換えてください。

scp iptables-export user@server_b_ip_address:/tmp

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

Iptablesルールのインポート

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

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

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

sudo iptables-restore < /tmp/iptables-export

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

ルールを保存

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

Ubuntu

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

sudo apt-get install iptables-persistent

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

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

sudo invoke-rc.d iptables-persistent save

CentOS6以前

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

sudo service iptables save

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

結論

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