【Ubuntu 20.04 LTS】iptablesからnftablesへ簡単に移行する方法

【Ubuntu 20.04 LTS】iptablesからnftablesへ簡単に移行する方法 プログラミング
【Ubuntu 20.04 LTS】iptablesからnftablesへ簡単に移行する方法

今日は久しぶりに技術的な投稿です。

仕事上で今までCentOS6を使っていたのですが、そのCentOS6のサポートが2020年11月30日に切れました。

サポートが切れても使える事は使えるのですが、セキュリティ面を考えてUbuntuに乗り換える事に。

CentOS6上で動いているシステムをそのままUbuntuで…と、そう簡単にはいかず、その中で調べて対応したFW(パケットフィルタリングツール)の件をお伝えしたいと思います。

ちなみに、この記事での移行先は『Ubuntu 20.04 LTS』をモデルとして、『iptables』から『nftables』への移行について説明させて頂きます。

この記事を書いた人(よしたか)

  • 現役のエンジニアでプログラマー歴は約12年
  • 使える言語としてはPHP,Java,Pythonなど多数有
  • 現在はPHPをメインとして開発業務を行っている
  • ベンチャー企業から大企業を経てフリー転身後に起業

手っ取り早くiptablesからnftablesへ移行できるのか?

まず、nftablesとは何か?

今まではiptablesが主流だったパケットフィルタリングツールですが、ここ数年ではiptablesに変わるnftablesの開発が進んでおり、nftablesを採用したLinuxディストリビューションも増えてきています。

そのため、iptablesからnftablesへ移行する事になりました。

移行する事は決まっても、新しくnftablesの仕様で作り直すのは大変…できるだけ元(iptables)の記述のまま移行したいですよね?

それは簡単に移行できるのか…答えは、できます!

早速手順を見ていきましょう。

iptablesからnftablesへ移行する手順

nftablesのセットアップ

// 1.rootになっておく(このあたりは環境による)
sudo su - 

// 2.不要なFWツールの削除(このあたりも環境による)
ufw disable
systemctl stop ufw

// 3.nftablesのインストール
apt-get install nftables

// 4.iptablesが使われているか確認
iptables --version
=====
iptables v1.8.4 (legacy)
=====

// 5.nftablesを使うようにコンフィグ設定を行う
// 以下のようにiptables-nft(2)を選択する
update-alternatives --config iptables
=====
  選択肢    パス                     優先度  状態
------------------------------------------------------------
  0            /usr/sbin/iptables-legacy   20        自動モード
  1            /usr/sbin/iptables-legacy   20        手動モード
* 2            /usr/sbin/iptables-nft      10        手動モード
=====

// 6.iptablesが使われているか再度確認
iptables --version
=====
iptables v1.8.4 (nf_tables)
=====

4の時点で「iptables v1.8.4 (nf_tables)」となっていれば、5〜6の手順は不要です。

これで準備はOKです。

iptablesからnftablesへ移行

iptablesを利用している人のほとんどがシェルスクリプトで実行していると思います。

1つのシェルスクリプト内でルールの設定〜iptablesの再起動〜などなど。

そのシェルスクリプトを極力変更せずに移行する(書き換え)手順です。

// iptablesの停止処理の記述変更
/etc/init.d/iptables stop
↓
nft flush ruleset
systemctl stop nftables

// iptablesの設定適用の記述変更
/etc/rc.d/init.d/iptables save
↓
nft list ruleset > /etc/nftables.conf

// iptablesの開始処理の記述変更
/etc/rc.d/init.d/iptables start
↓
systemctl start nftables

たったこれだけでOKです。

簡単ですよね。

設定確認は以下のとおり。

// iptablesの時は
/etc/init.d/iptables status

// nftablesの時は
cat /etc/nftables.conf

iptablesからnftablesへ移行まとめ

1から移行すると大変な作業になりますが、このように簡単に移行できるツールはエンジニアとしては大変助かります。

意外と手間取ってしまったので、同じように悩んでいる人の参考になればと思います。

最後まで読んでいただきありがとうございます!