man ufw-framework
の日本語訳。
UFW FRAMEWORK(8)
May 2023 UFW FRAMEWORK(8)
NAME
ufw-framework - ufw フレームワームの使用方法
DESCRIPTION
ufw はネットフィルターファイアウォールを管理する為の
コマンドラインインターフェイスとフレームワームを提供します。
ufw コマンドが簡単に操作できるファイアウォールの管理インターフェイスを提供する一方、
ufw フレームワームは既定の動作とコマンドラインツールによってサポートされない
ルール群をカスタマイズする管理者向けの道具を提供します。
この方式において ufw は完全な Linux ネットフィルターの力と
柔軟性を利用することができます。
OVERVIEW
フレームワームは以下を提供します。
- ブート時の初期化処理
- カスタムルール群を追加する為のルールファイル群
- ネットフィルターモジュール群を読み込む方法
- カーネルパラメータの設定
- IPv6 の設定
フレームワークは以下のファイル群から構成されます:
/lib/ufw/ufw-init
初期化スクリプト
/etc/ufw/before.init
ufw 初期化前に実行する初期化カスタマイズスクリプト
/etc/ufw/after.init
ufw 初期化後に実行する初期化カスタマイズスクリプト
/etc/ufw/before[6].rules
UI がルール群を登録する前に評価される
ルール群を記載したルールファイル
/etc/ufw/user[6].rules
UI が登録したルール群を記載したルールファイル
(ufw コマンドで管理されるルール群)
/etc/ufw/after[6].rules
UI がルール群を登録した後に評価される
ルール群を記載したルールファイル
/etc/default/ufw
高レベルの設定
/etc/ufw/sysctl.conf
調整可能なカーネルネットワーク
/etc/ufw/ufw.conf
追加の高レベルの設定
BOOT INITIALIZATION
ufw はブート時に /lib/ufw/ufw-init を使用して起動します。
このスクリプトは、 ufw コマンドによって使用される
標準的な SysV 形式の起動スクリプトです。
修正はしないでください。
/etc/before.init
と /etc/after.init
は、 ufw がまだサポートしていない
追加のファイアウォール設定を設定する時に使用されることがあります。
/etc/before.init
と /etc/after.init
が存在して実行可能である場合、
ufw-init は before.init
と after.init
に記述された処理を実行します。
before.init
と after.init
どちらかがエラー終了した場合、
ufw-init はエラー終了します。
ufw-init は下記の引数をサポートします:
start
ファイアウォールを起動します。
stop
ファイアウォールを停止します。
restart
ファイアウォールを再起動します。
force-reload
restart と同様です。
status
ファイアウォールの基本的なステータスを表示します。
force-stop
stop と同様です。
ただしファイアウォールが既に起動している場合でも確認を行いません。
flush-all
組込みのチェインを削除し、非組込みのチェインを削除して
ポリシーを ACCEPT
にリセットします。
ufw-init
下記の実行時に before.init
と after.init
を呼び出します。
before.init
と after.init
を使用する場合、
一般的には start と stop の実装のみが必要です。
ufw は、組込みの iptables チェインに加えて、
ユーザーが定義したチェインをたくさん使用します。
/etc/default/ufw の MANAGE_BUILTINS
に
yes
が設定されている場合、
停止時と再起動時に組込みチェインは削除されます。
no
に設定されている場合、停止時と再起動時に
ufw のユーザー定義チェインと組込みチェインは削除されます。
ufw の特定のチェインの削除に加えて、
組込みチェインは登録済みユーザー定義チェインと同じ順序で維持されます。
これにより独自のファイアウォールルールを管理する
他のソフトウェアと ufw を相互運用できるようになります。
ユーザーの定義したファイアウォールがブート時に読み込まれていることを保証するには、
ブートプロセスへ起動スクリプトを統合しなければなりません。
ufw がまだ統合されていない場合、ブートプロセスを正しく修正する為に
ディストリビューションのドキュメントを確認してください。
RULES FILES
ufw は iptables-restore 向けフロントエンドの一つです。
ufw はルール群を下記へ保存します。
管理者は標準的な iptables-restore の構文を使用して
before.rules と after.rules を望み通りにカスタマイズできます。
ルール群は次の順に評価されます:
IPv6 ルール群も同様の順で評価されます:
ufw status
は ufw を使用して追加したルール群のみを表示します。
/etc/ufw
配下のルールファイル群から取り込んだルール群は表示しません。
重要: ufw はデフォルトで *filter
テーブルのみを使用します。
以下に示すような他のテーブルは必要に応じて追加してください。
*nat
*raw
*mangle
各テーブルに対応した COMMIT
ステートメントが必須となります。
ルールファイル群を更新した後は、更新したルール群が効力を発揮する為に
ufw のリロードが必要となります。
ルールファイル群の一般的な使い方については EXAMPLES を参照してください。
MODULES
ネットフィルターは数多くのコネクショントラッキングモジュールを有しています。
このモジュール群はプロトコルの基礎として認識されており、
管理者へルールセットの簡素化をもたらします。
ユーザーは /etc/default/ufw 配下の
IPT_MODULES
を調整することで、
どのネットフィルターモジュール群を読み込むか設定することができます。
よく使用されるモジュール群を例示します:
- nf_conntrack_ftp
- nf_nat_ftp
- nf_conntrack_irc
- nf_nat_irc
- nf_conntrack_netbios_ns
- nf_conntrack_pptp
- nf_conntrack_tftp
- nf_nat_tftp
- nf_conntrack_sane
条件を指定しないコネクショントラッキングモジュール群の読み込み記法(例: nf_contrack_*
)は非推奨です。
ufw は引き続き機能をサポートしますが、新しい構成には
サイトに必要な特定のモジュールのみを含める必要があります。
詳細は CONNECTION HELPERS を参照してください。
KERNEL PARAMETERS
ufw が有効である場合、ブート時に /etc/ufw/sysctl.conf を読み込みます。
/etc/ufw/sysctl.conf はシステムの sysctl.conf
(通常は /etc/sysctl.conf
)の値を上書きします。
管理者は /etc/default/ufw を修正することで sysctl.conf
の上書きに使用するファイルを変更することができます。
IPV6
IPv6 は既定で有効化されています。
無効化すると全ての受信パケット、送信パケット、転送パケットが、
ループバックインターフェイス上のトラフィック例外として棄却されます。
上記の挙動を変更するには /etc/default/ufw に記載されている IPV6
へ yes
を設定してください。
詳細は ufw のマニュアルページ を参照してください。
EXAMPLES
前述の通り、 ufw は iptables-restore コマンドと
ip6tables-restore コマンドを使用して
カーネルへルールファイル群を読み込みます。
ufw ルールファイル群へ手動でルールの追加をしたいユーザーは、
ルールファイル群に加えて iptables コマンドと ip6tables コマンドにも
精通している必要があります。
以下に ufw ルールファイル群の一般的な使用例を示します。
使用例は IPv4 のみを前提とし、 /etc/default/ufw の
DEFAULT_FORWARD_POLICY
へ DROP
が設定されているものとします。
IP Masquerading
eth1
の 10.0.0.0/8
ネットワークから
eth0
の単一の IP アドレスへ共有する
IP マスカレードを許可するには /etc/ufw/sysctl.conf を編集します:
net.ipv4.ip_forward=1
/etc/ufw/before.rules の末尾、 *filter
セクションの後に下記を追加します:
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE
COMMIT
ファイアウォールに IPv6 トンネルや 6to4 を使用している場合、
あるいは NAT を使用している場合、プロトコル 41
(IPv6)パケットは転送しないでください。
上記の代わりに /etc/ufw/before.rules で設定する方法を例示します:
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.0.0/8 ! --protocol 41 -o eth0
-j MASQUERADE
COMMIT
トラフィックの許可を ufw route
ルールへ追加します:
ufw route allow in on eth1 out on eth0 from 10.0.0.0/8
Port Redirections
eth0
の tcp ポート 80 番から 10.0.0.2
にあるウェブサーバーへ転送するには
/etc/ufw/sysctl.conf を編集します:
net.ipv4.ip_forward=1
/etc/ufw/before.rules の末尾、 *filter
セクションの後に下記を追加します:
*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp -i eth0 --dport 80 -j DNAT \
--to-destination 10.0.0.2:80
COMMIT
トラフィックの許可を ufw route
ルールへ追加します:
ufw route allow in on eth0 to 10.0.0.2 port 80 proto tcp
Egress filtering
eth0
から送信される RFC1918 アドレスを遮断するには
トラフィックを棄却するルール群を ufw route
へ追加します:
ufw route reject out on eth0 to 10.0.0.0/8
ufw route reject out on eth0 to 172.16.0.0/12
ufw route reject out on eth0 to 192.168.0.0/16
Full example
この例では、他の例を組み合わせて、単純なルーティングファイアウォールを示します。
警告: この設定は ufw フレームワークの機能を簡潔に単純な記法で示す為の例に過ぎません。
各所で何を行い、何を行っていないのか理解しないまま本番環境へ使用しないでください。
ファイアウォールは間違いなく、なるべく開いていないほうがよいでしょう。
このルーター/ファイアウォールは 2 つのインターフェイスを保有します:
-
eth0
(インターネットへ接続) -
eth1
(インターナル LAN)
インターナルクライアントは 10.0.0.0/8
ネットワークのアドレスを持ち、
インターネット上のどこへでも接続できます。
インターネットからポート 80 番への接続は 10.0.0.2
へ転送されるべきです。
管理用ワークステーション(10.0.0.100
)から
インターナルクライアントの ssh ポート 22 番への接続は許可されるべきです。
インターナルトラフィックはインターネットへ送信しないものとします。
/etc/ufw/sysctl.conf を編集します:
net.ipv4.ip_forward=1
/etc/ufw/before.rules の末尾、 *filter
セクションの後へ下記を追加します:
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp -i eth0 --dport 80 -j DNAT \
--to-destination 10.0.0.2:80
-A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE
COMMIT
必要な ufw ルール群を追加します:
ufw route reject out on eth0 to 10.0.0.0/8
ufw route reject out on eth0 to 172.16.0.0/12
ufw route reject out on eth0 to 192.168.0.0/16
ufw route allow in on eth1 out on eth0 from 10.0.0.0/8
ufw route allow in on eth0 to 10.0.0.2 port 80 proto tcp
ufw allow in on eth1 from 10.0.0.100 to any port 22 proto tcp
CONNECTION HELPERS
ネットフィルターコネクショントラッキングヘルパーは
関連パケットを関連フローにグループ化し、ルールセットをより明確かつ正確にします。
使用に際して様々なプロトコルが必要です。
例えば、いくつかのカーネルモジュールといくつかのルールがあれば、
ルールセットは FTP ポート 21 番への接続を許可するだけで済みます。
カーネルはトラフィックを調べ、他の FTP データパケットを
最初の接続に関連するものとしてマークします。
ヘルパーが最初に導入されたとき、モジュールロードの一部としてのみ
モジュールを構成できました。
(例えば FTP サーバーが 21 番とは異なるポートで接続を待受けている場合、 nf_conntrack_ftp
モジュールへ正しいポートを指定してロードする必要があります)
接続ヘルパーを無条件に使用すると、時間が経つにつれて
誤用につながる可能性があることが理解されました。
一部のプロトコルでは、望ましくない方法で
ファイアウォールを通過できるユーザー指定のデータが許可されているためです。
現行カーネル 4.7 では自動接続トラックヘルパーの割当(例: 特定のポートとすべてのIPアドレスのパケットの処理)は無効化されています。
(古い挙動は、 /etc/ufw/sysctl.conf へ net/netfilter/nf_contrack_helper=1
を設定することで復元することができます)
ファイアウォールは、代わりに CT ターゲットを使用して
トラフィックを特定のヘルパーに関連付け、
ヘルパーを使用するように RELATED
ルールを設定する必要があります。
これによりサイトはヘルパーの使用をカスタマイズし、不正使用を回避できます
一般的にヘルパーを安全に使用する為には、下記が必要となります:
-
net/netfilter/nf_conntrack_helper
は0
(既定値)に設定されるべきです。 -
接続開始用のルールを作成します。(例えば FTP の場合はポート 21 番)
-
接続とヘルパーを関連付けるヘルパールールを作成します。
-
接続と
RELATED
フローを関連付けるヘルパールールを作成します。 -
必要であれば対応する
nf_conntrack_*
モジュールをIPT_MODULES
へ追加します。 -
任意の対応する
nf_nat_*
モジュールをIPT_MODULES
へ追加します。
一般的に、ルールセットのセキュリティ問題を回避するために、
接続ヘルパールールを可能な限り具体的にし、
サイトにスプーフィング防止が正しく設定されていることを確認することが望ましいです。
詳細は ANTI-SPOOFING
と Secure use of iptables and connection tracking helpers を参照してください。
ヘルパールール群は、ルールファイル群を通じて管理が必須となります。
ufw の将来のバージョンでは、ヘルパールールを操作するための構文が導入される予定です。
NOTES
ufw を libvirt を使用してブリッジを構成する場合、
パケットがブロックされることがあります。
libvirt チームは sysctl へブリッジのネットフィルターを
無効に設定することを推奨しています:
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
ブリッジモジュールは上記の値が設定される前に
カーネルへ読み込まれなければならないことに留意してください。
ufw を使用してこの動作を正しく保証する一つの方法は、
/etc/default/ufw の IPT_MODULES
へ bridge
を登録し、
上記のルール群を /etc/ufw/sysctl.conf へ追加することです。
ブリッジのネットフィルターを無効化する方法もあります。
ブリッジを介して転送される全トラフィックを許可するように iptable へ設定することができます。
例えば /etc/ufw/before.rules の *filter
セクションへ下記を追加します:
-I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
SEE ALSO
- ufw(8)
- iptables(8)
- ip6tables(8)
- iptables-restore(8)
- ip6tables-restore(8)
- sysctl(8)
- sysctl.conf(5)