8.4. nftables スクリプトの作成および実行
nftables フレームワークを使用する主な利点は、スクリプトの実行がアトミックであることです。つまり、システムがスクリプト全体を適用するか、エラーが発生した場合には実行を阻止することを意味します。これにより、ファイアウォールは常に一貫した状態になります。
さらに、nftables スクリプト環境を使用すると、次のことができます。
- コメントの追加
- 変数の定義
- 他のルールセットファイルの組み込み
nftables パッケージをインストールすると、Red Hat Enterprise Linux が自動的に *.nft スクリプトを /etc/nftables/ ディレクトリーに作成します。このスクリプトは、さまざまな目的でテーブルと空のチェーンを作成するコマンドが含まれます。
8.4.1. 対応している nftables スクリプトの形式 リンクのコピーリンクがクリップボードにコピーされました!
nftables スクリプト環境では、次の形式でスクリプトを記述できます。
nft list rulesetコマンドと同じ形式でルールセットが表示されます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow nftコマンドと同じ構文:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.4.2. nftables スクリプトの実行 リンクのコピーリンクがクリップボードにコピーされました!
nftables スクリプトは、nft ユーティリティーに渡すか、スクリプトを直接実行することで実行できます。
手順
nftablesスクリプトをnftユーティリティーに渡して実行するには、次のコマンドを実行します。nft -f /etc/nftables/<example_firewall_script>.nft
# nft -f /etc/nftables/<example_firewall_script>.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow nftablesスクリプトを直接実行するには、次のコマンドを実行します。1 回だけ実行する場合:
スクリプトが以下のシバンシーケンスで始まることを確認します。
#!/usr/sbin/nft -f
#!/usr/sbin/nft -fCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要-fパラメーターを指定しないと、nftユーティリティーはスクリプトを読み取らず、Error: syntax error, unexpected newline, expecting stringを表示します。必要に応じて、スクリプトの所有者を
rootに設定します。chown root /etc/nftables/<example_firewall_script>.nft
# chown root /etc/nftables/<example_firewall_script>.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 所有者のスクリプトを実行ファイルに変更します。
chmod u+x /etc/nftables/<example_firewall_script>.nft
# chmod u+x /etc/nftables/<example_firewall_script>.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow
スクリプトを実行します。
/etc/nftables/<example_firewall_script>.nft
# /etc/nftables/<example_firewall_script>.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力が表示されない場合は、システムがスクリプトを正常に実行します。
nft はスクリプトを正常に実行しますが、ルールの配置やパラメーター不足、またはスクリプト内のその他の問題により、ファイアウォールが期待通りの動作を起こさない可能性があります。
8.4.3. nftables スクリプトでコメントの使用 リンクのコピーリンクがクリップボードにコピーされました!
nftables スクリプト環境は、# 文字の右側から行末までのすべてをコメントとして解釈します。
コメントは、行の先頭またはコマンドの横から開始できます。
8.4.4. nftables スクリプトでの変数の使用 リンクのコピーリンクがクリップボードにコピーされました!
nftables スクリプトで変数を定義するには、define キーワードを使用します。シングル値および匿名セットを変数に保存できます。より複雑なシナリオの場合は、セットまたは決定マップを使用します。
- 値を 1 つ持つ変数
以下の例は、値が
enp1s0のINET_DEVという名前の変数を定義します。define INET_DEV = enp1s0
define INET_DEV = enp1s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow スクリプトで変数を使用するには、
$記号と、それに続く変数名を指定します。... add rule inet example_table example_chain iifname $INET_DEV tcp dport ssh accept ...
... add rule inet example_table example_chain iifname $INET_DEV tcp dport ssh accept ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 匿名セットを含む変数
以下の例では、匿名セットを含む変数を定義します。
define DNS_SERVERS = { 192.0.2.1, 192.0.2.2 }define DNS_SERVERS = { 192.0.2.1, 192.0.2.2 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow スクリプトで変数を使用するには、
$記号と、それに続く変数名を指定します。add rule inet example_table example_chain ip daddr $DNS_SERVERS accept
add rule inet example_table example_chain ip daddr $DNS_SERVERS acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記中括弧は、変数がセットを表していることを示すため、ルールで使用する場合は、特別なセマンティクスを持ちます。
8.4.5. nftables スクリプトへのファイルの追加 リンクのコピーリンクがクリップボードにコピーされました!
nftables スクリプト環境では、include ステートメントを使用して他のスクリプトを含めることができます。
絶対パスまたは相対パスのないファイル名のみを指定すると、nftables には、デフォルトの検索パスのファイルが含まれます。これは、Red Hat Enterprise Linux では /etc に設定されています。
例8.1 デフォルト検索ディレクトリーからのファイルを含む
デフォルトの検索ディレクトリーからファイルを指定するには、次のコマンドを実行します。
include "example.nft"
include "example.nft"
例8.2 ディレクトリーの *.nft ファイルをすべて含む
*.nft で終わるすべてのファイルを /etc/nftables/rulesets/ ディレクトリーに保存するには、次のコマンドを実行します。
include "/etc/nftables/rulesets/*.nft"
include "/etc/nftables/rulesets/*.nft"
include ステートメントは、ドットで始まるファイルに一致しないことに注意してください。
8.4.6. システムの起動時に nftables ルールの自動読み込み リンクのコピーリンクがクリップボードにコピーされました!
systemd サービス nftables は、/etc/sysconfig/nftables.conf ファイルに含まれるファイアウォールスクリプトを読み込みます。
前提条件
-
nftablesスクリプトは、/etc/nftables/ディレクトリーに保存されます。
手順
/etc/sysconfig/nftables.confファイルを編集します。-
nftablesパッケージのインストールで/etc/nftables/に作成された*.nftスクリプトを変更した場合は、これらのスクリプトのincludeステートメントのコメントを解除します。 新しいスクリプトを作成した場合は、
includeステートメントを追加してこれらのスクリプトを含めます。たとえば、nftablesサービスの起動時に/etc/nftables/example.nftスクリプトを読み込むには、以下を追加します。include "/etc/nftables/_example_.nft"
include "/etc/nftables/_example_.nft"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
オプション:
nftablesサービスを開始して、システムを再起動せずにファイアウォールルールを読み込みます。systemctl start nftables
# systemctl start nftablesCopy to Clipboard Copied! Toggle word wrap Toggle overflow nftablesサービスを有効にします。systemctl enable nftables
# systemctl enable nftablesCopy to Clipboard Copied! Toggle word wrap Toggle overflow