localhost:TCPポートでのインバウンドアクセスの制限

localhost:TCPポートでのインバウンドアクセスの制限

私が制御できない理由でTCP "localhost:$ PORT"にバインドされたバイナリがあります。 (Unixソケットバインディングによってこの質問に疑問が生じる可能性があります)。

私が正しく理解した場合、これは、ネットワークシステムが接続できない場合でも、そのシステムの他のユーザー(権限のないデーモンユーザーを含む)がそのポートに接続できることを意味します。

$ meで実行されているバイナリのみがこのポートに接続できるように指定する方法はありますか?設定を指定するためにルートにすることができますが、受信バイナリと接続バイナリの両方が root ではなく $me ユーザーとして実行されます。

ベストアンサー1

iptablesには一致する拡張機能がありますが、ownerOUTPUTおよびPOSTROUTINGチェーンでのみ使用できます。したがって、次のようにiptables OUTPUTチェーンの先頭に2つのルールを追加できます(rootアクセスが必要)。

iptables -I OUTPUT 1 -o lo -p tcp --dport $PORT -m owner --uid-owner $me -j ACCEPT
iptables -I OUTPUT 2 -o lo -p tcp --dport $PORT -j DROP
  • ルール1:パケットがTCPを介してループバックインターフェイスから送信され、宛先ポートが$ PORTでパケット所有者が$ meの場合は、そのパケットを通過させます(そしてこのチェーンの他のルールは処理しないでください)。
  • ルール2:パケットがTCPを介してループバックインターフェイスから送信され、宛先ポートが$ PORTであるがルール1と一致しない場合(つまり、$ me以外の人がパケットを所有している場合)、パケットを破棄します。

システムにiptables設定を管理するサービスがある場合(たとえば、ufwDebian / UbuntuやfirewalldRedHat / Fedoraシステムなど)、手動で直接追加するのではなく、これらのiptablesルールを生成するようにサービスを構成できます。

おすすめ記事