デーモン固有のポートを開く

デーモン固有のポートを開く

一時ポートの範囲内で任意のポートを使用する場合、特定のデーモンのファイアウォールインバウンドルールをどのように設定できますか? Windowsにはカスタムルールウィザードがあります。デーモン固有のインバウンドルールトラフィックを許可するために使用できる同様の機能は、LINUXとUNIXにありますか?ありがとうございます。

答え1

私のDebian Linux 10にはiptables次のモジュールがありますowner

root@avalon:~# iptables -m owner --help |tail -n4
owner match options:
[!] --uid-owner userid[-userid]      Match local UID
[!] --gid-owner groupid[-groupid]    Match local GID
[!] --socket-exists                  Match if socket exists
root@avalon:~# 

専用ユーザーとしてこのサービスを展開できる場合は、必要なものを入手できます。

答え2

デーモンのプロセスID(pid)を知っていると、ファイアウォールルールを動的に変更するスクリプトを簡単に作成できます。どのファイアウォールを使用しているのか、「すべてを許可しない」または「すべてを許可しない」ルールセットであるのかは明らかではありませんが、ここにいくつかのアイデアを取得して構築するための基本的なスクリプトがあります。

このスクリプトは、4000~5000の任意のTCPポートでnetcatリスナーを起動します。

nc -l $((RANDOM%1000+4000)) &
echo $!
sleep 2 #avoid bad way to avoid a race condition.
DYNAMICPORT=`netstat -lpdn | grep $! |  awk '{print $4}'`. 

echo $DYNAMICPORT
0.0.0.0:4078

その後、$ DYNAMICPORTを使用して、それに応じてファイアウォールルールを動的に変更できます。

このプロセスが完了すると、動的に追加したすべてのルールが削除されることに注意してください。

このソリューションの問題は、デーモンが一時ポート範囲を使用するため、定期的に実行する必要があることです。

この回避策の問題#1:デーモンがポートを開いたり閉じたりする時間と、スクリプトがポートを検出する時間との間にいくつかの競合状態が発生する可能性があります。

問題#2:スクリプトでiptablesルールセットを動的に管理すると、問題が発生する可能性があります。

問題#3:デーモンがフォークされ、そのフォークがポートを開くと、このスクリプトは失敗します。

問題#4:デーモンが引き続きリッスンポートを開くと、スクリプトは実行を続ける必要があります。これは面倒な作業です。

問題#5:これ以上受信せずにアクティブな受信ポートを追跡するのは難しいため、ファイアウォールルールを削除できません。

関連情報