前書き

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

前提条件

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

また、両方のサーバーへのスーパーユーザー、または「+ sudo +」アクセス権が必要です。

既存のIptablesルールを表示

iptablesルールを移行する前に、設定内容を確認しましょう。 * Server 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ルールを持つ* Server A *で、 `+ iptables-save +`を使用して、現在のルールを「iptables-export」という名前のファイルにエクスポートします。

cd ~
sudo iptables-save >

これにより、ホームディレクトリに `+ 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ルールの構成が含まれています。 これで、このファイルをコピー先サーバー* Server B *にコピーする準備ができました。

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

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

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

scp iptables-export @:/tmp

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

Iptablesルールのインポート

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

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

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

sudo iptables-restore < /tmp/iptables-export

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

ルールを保存

Iptablesルールは一時的なものであるため、リブート後もそれらが持続するように特別な注意が必要です。* Server B *でこのステップを実行する可能性があります。 UbuntuとCentOSの両方でルールを保存する方法を示します。

ウブンツ

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

sudo apt-get install iptables-persistent

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

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

sudo invoke-rc.d iptables-persistent save

CentOS 6以降

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

sudo service iptables save

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

結論

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