さまざまなubuntuサーバーに/etc/init.d/iptables start|stop|restart
スクリプトがあります(これは通常のシェルスクリプトです)
新しいサービスごとに、ポートを開くための行を編集して挿入する必要があります。これにより、さまざまなマシンでさまざまなバージョンのinit.dスクリプトが作成されます。
/etc/iptables/include.d/
にすべてのファイルを自動的に含めることは可能ですか?
目標は、/ etc/init.d/iptablesのstart関数に次のような行のみを含めることです。
include /etc/iptables/include.d/*
そして、/etc/iptables/include.d/
の追加ファイルの後、私は単に言います
/etc/init.d/iptables restart
編集: Saurabhが指摘したように、コマンドに特定の順序が必要な場合、これにより問題が発生する可能性があります。高度なセットアップでは、次のようなさまざまなディレクトリを使用できます。
/etc/iptables/include01.d/
/etc/iptables/include02.d/
/etc/iptables/include03.d/
そしてこのようにそれらを含める:
include /etc/iptables/include01.d/* ...メインファイルにコードが含まれている可能性があります... include /etc/iptables/include02.d /* include/etc/iptables/include03.d/*
Init.dスクリプトに次の行を追加します。
run-parts --report /etc/iptables/include.d
ディレクトリ内のすべてをシェルスクリプトとして実行します(実行可能である必要があります)。
.portで終わるファイルのみを実行する場合は、次のようなものを使用できます。
run-parts --regex '\.port$' /etc/iptables/include.d/
順序が正しいことを確認したい場合は、ファイルに名前を付けることができます。
10_web.port
20_ssh.port
etc..
for f in /etc/iptables/include.d/*
. $f
done
ドットと%fの間のスペースに注意してください
Saurabhは正しいです-これは意図したとおりに機能する必要はありませんが、10-xxx、20-yyyなどの命名規則を使用すると管理しやすい場合があります。
Bashで単純な関数を定義できます。
function include() {
for FILE in $( find "$1" -type f -print | sort )
do
source $FILE
done
}
その後:
include some_dir/*
あるいは:
include some_dir/*.conf
テンプレートファイルからiptablesスクリプトを作成することも検討できます。その1つが元のiptablesスクリプトです。関連するディレクトリ内のテンプレートファイルを読み取り、それらから新しいiptablesスクリプトを作成するスクリプトを作成します。そうすれば、変更を加える必要がある場合は、テンプレートで変更を行い、スクリプトジェネレーターを再実行するだけです。
この方法を使用すると、基本テンプレートに派手なマーカーを配置して、テンプレートツリーの特定のディレクトリのファイルをいつ含めるかを通知することもできます。
Iptables構成にファイルを含めることはできないと思います。ファイアウォールルールは、記述された順序に大きく依存するため、この選択は理にかなっています。フォルダにファイルを含めるだけの場合、iptablesは最初に配置するルールと後で配置するルールを認識しません。
空のディレクトリで適切に動作するにはinclude.d/
できるよ:
for f in /etc/iptables/include.d/*; do
[[ -e "${f}" ]] && . "${f}"
done