Iptablesファイアウォールルールを新しいサーバーに移行する方法
序章
あるサーバーから別のサーバーに移行する場合、プロセスの一部として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によってロードされます。
結論
おめでとう! ファイアウォールルールが元のサーバーから新しいサーバーに移行されました。