目的は、サーバー上で実行されているDockerコンテナサービス/ポートへの特定のネットワークアクセスのみを許可することです。
INPUTフィルタチェーンにACCEPTルールを追加してみてください。これは役に立ちません。許可されたルールがないネットワークでも、Docker サービス/ポートにアクセスできます。
FORWARDチェーンにACCEPTおよびDROPルールを追加してみたところ、効果がありました。しかし、これには、dockerの再起動時にルールが削除または再配置されるなど、多くの欠点があります。 dockerコンテナが再配布され、実行時に別のIPを取得すると、ルールが無効になる可能性があります。
計画は、FORWARDチェーンに到達する前にそれをブロックすることです。
したがって、NATテーブルに新しいチェーンが追加され、許可されたネットワークから来る場合はトラフィックをDOCKERチェーンにリダイレクトし、他のネットワークから来る場合はBLOCKHOLE IPにDNATを追加します。 PREROUTINGの最初のルールはチェーンにジャンプすることです。これはうまくいくようです。
DNAT tcp - 0.0.0.0/0 0.0.0.0/0 tcp dpt:1234〜:0.0.0.1
しかし、このトラフィックを何らかの方法で拒否することで、クライアントがそのトラフィックが許可されていないことを知ることができます。したがって、BLOCKHOLEにリダイレクトするのではなく拒否できますか?
ベストアンサー1
これは特に良いことではありませんが、PREROUTINGのどこかからブラックホールアドレスにトラフィックをDNATする場合(例:192.0.2.1で予約されているネットワークアドレスを選択するなど)https://en.wikipedia.org/wiki/Reserved_IP_addresses)その後、フィルタテーブルからFORWARDを拒否/削除できます。これは1つのルールしか必要とせず、そのルールがターゲットに変更されないようにすることをお勧めします。