パブリックDNSのプライベートIPアドレス


62

ファイアウォールの背後に、メールのパブリックAレコードを持つSMTP専用メールサーバーがあります。 このメールサーバーにアクセスする唯一の方法は、同じファイアウォールの背後にある別のサーバーからです。独自のプライベートDNSサーバーは実行していません。

プライベートDNSアドレスをパブリックDNSサーバーのAレコードとして使用することをお勧めしますか?または、これらのサーバーレコードを各サーバーのローカルホストファイルに保持することをお勧めしますか?

回答:


62

一部の人々は、プライベートDNSアドレスがプライベートIPアドレスを開示するべきではないと言うでしょう。...潜在的な攻撃者にプライベートシステムを悪用するのに必要な情報を提供していると考えて。

個人的には、難読化はセキュリティの貧弱な形態だと思います。特にIPアドレスについて話している場合は、一般に推測が容易であるため、現実的なセキュリティ上の妥協とは見なされません。

ここでのより大きな考慮事項は、パブリックユーザーがホストアプリケーションの通常のパブリックサービスの一部としてこのDNSレコードを取得しないようにすることです。すなわち、外部DNSルックアップは、どういうわけか到達できないアドレスへの解決を開始します。

それ以外にも、プライベートアドレスAレコードをパブリックスペースに置くことが問題になる根本的な理由はありません。特に、ホストする代替DNSサーバーがない場合はそうです。

このレコードをパブリックDNSスペースに配置することにした場合、すべての「プライベート」レコードを保持するために、同じサーバー上に別のゾーンを作成することを検討できます。これにより、それらがプライベートであることを明確にすることができます....たった1つのAレコードについては、おそらく気にしないでしょう。


+1、理由についてはwombleの回答へのコメントを参照してください:)
MihaiLimbăşan09年

2
これは、このアイデアの問題の良い例です。merit.edu
mail.archives

パブリックIPアドレスを持つ機密性の高いサーバーがあり、アクセスを制限するファイアウォールの背後にある場合、このアドバイスは引き続き適用されますか?パブリックIPアドレスのパブリックDNSがインフラストラクチャのロードマップを提供する場合、その一部は攻撃者に使用されませんか?ホスト識別?
ケニー

@Kennyはい、理論的にはこれにはある程度の用途がありますが、パブリックIPアドレスの範囲はとにかく容易に発見できるため、取得するのは難しくありません。私は答えでこれに対処し、その概念に加えて、あらゆる種類の重要な防衛線としてIPアドレスまたはホスト名を隠すことに依存している場合、あなたはすでにはるかに大きな問題を抱えていると主張します。
トールジェフ

1
@Kennyあなたの言うまでもなく、公に発見できる情報の量を最小限に抑えることは確かに望ましいことであり、あなたが必要としないか、少なくとも何らかの種類の良い費用/利益の取引を持っていなかった何かを開示したくないでしょう-それを検討するために関与オフ。議論はありません。それとは別に、私のポイントの核心は(そして、私たちは同意すると思います)その難読化は貧弱な形態のセキュリティであり、絶対的な善/悪はないが、コスト/利益のトレードオフの連続のみがあるということでしたなど、あなたのリスク許容度に応じてケースバイケースで考慮
トールジェフ

36

私はしばらく前にNANOGリストでこのトピックについて長い議論をしました。私はいつもそれは悪い考えだと思っていましたが、実際にはそれほど悪い考えではないことがわかりました。困難は主にrDNSルックアップ(プライベートアドレスの場合は外部では機能しない)に起因するものであり、VPNなどを介してアドレスへのアクセスを提供する場合、VPNクライアントが適切に保護されていることを確認することが重要ですVPNがダウンしているときのトラフィックの「漏洩」。

私はそれのために行くと言います。攻撃者が名前を内部アドレスに解決できることから何か意味のあるものを得ることができれば、より大きなセキュリティ問題を抱えていることになります。


1
+1、この質問に対するFUDのすべての回答で正気の声をありがとう。背下部の「セキュリティリスク」と、ルーティングの問題とDNSの問題がひざまずく「やらない」反応にまとめられているのを見ると、あちこちでネットワークを運用している人々の能力に疑問を感じるだけです。
ミハイリンバザン2009

1
修正:「ルーティングの問題とDNSの問題、および認証/ IDの問題をまとめて見る」ようにします。
ミハイリンバシャン2009

8

一般に、RFC1918アドレスをパブリックDNSに導入すると、実際の問題ではないにしても、将来のある時点で混乱が生じます。IP、ホストレコード、またはゾーンのプライベートDNSビューを使用して、ファイアウォールの背後にあるRFC1918アドレスを使用しますが、パブリックビューには含めません。

提出された他の応答に基づいて私の応答を明確にするために、パブリックDNSにRFC1918アドレスを導入することは、セキュリティ上の問題ではなく、偽造だと思います。誰かが問題をトラブルシューティングするために私に電話し、DNSのRFC1918アドレスを偶然見つけた場合、私は本当にゆっくり話し始め、最近再起動したかどうかを尋ねます。たぶんそれは私の側のである、私は知らない。しかし、私が言ったように、それはする必要のあることではなく、ある時点で混乱と誤解(コンピューターではなく人間)を引き起こす可能性があります。なぜそれを危険にさらすのですか?


1
これらはどのような実際の問題ですか?人々はどのように混乱しますか?
ワンブル

2
だから...丁寧です... 1918年のアドレスをパブリックDNSに入れないのですか?「隠された」および「スプリットホライズン」DNSゾーンが引き起こした多くの問題に遭遇しましたが、パブリックDNSのプライベートIPによって引き起こされた問題はほとんどありません。私はただ問題を見ません。
ワンブル

2
@womble、何らかの理由でネットワーク外部のホストに接続しようとすると、コンピューターが混乱する可能性があり、SMTPサーバーを取得する代わりに、現在接続しているLAN上のそのIPアドレスにあるものは何でも取得すると予想していました。それも、リモートでラップトップPCを使用して、スタッフの一人が、彼らはまた、192.168.1.1を持って起こるという理由だけで誰か他の人のネットワーク上でプレーンテキストでユーザー名とパスワードを噴き出す始めるかもしれないという可能性
Zoredache

16
あなたの答えに関して私が抱えている問題は、あなたが問題をほのめかしているということですが、詳細は提供しません。それをしない理由がある場合、私はそれらについて知りたいので、私は主題に関して完全に論理的な決定を下すことができます。
ワンブル

1
@Zoredache:誰かがアクセスできない名前を解決するのはなぜですか?とにかく、プライベートアドレスを取得できる場所はDNSだけではありません。たとえば、HTMLではIPリテラルを使用できます...
womble

5

いいえ、プライベートDNSアドレスをパブリックDNSに入れないでください。

まず、情報が漏洩しますが、これは比較的小さな問題です。

MXレコードがその特定のホストエントリを指している場合の最悪の問題は、そのホストエントリにメールを送信しようとすると、だれでもメール配信タイムアウトが発生することです。

送信者のメールソフトウェアによっては、バウンスが発生する場合があります。

さらに悪いことに、RFC1918アドレススペース(ネットワーク内で使用する必要があります)を使用していて、送信者もそうである場合、代わりにメールを自分のネットワークに送信しようとする可能性があります。

例えば:

  • ネットワークには内部メールサーバーがありますが、スプリットDNSはありません
  • したがって、adminはDNSにパブリックIPアドレスと内部IPアドレスの両方を配置します
  • MXレコードは両方を指します:

 $ORIGIN example.com
 @        IN   MX    mail.example.com
 mail     IN   A     192.168.1.2
          IN   A     some_public_IP

  • これを見た人は192.168.1.2に接続しようとするかもしれません
  • 最良の場合、ルートがないためバウンスします
  • ただし、192.168.1.2を使用するサーバーもある場合、メールは間違った場所に送られます

はい、それは壊れた構成ですが、私はこれを(そしてさらに悪いことに)見ました。

いいえ、それはDNSのせいではなく、言われたことをしているだけです。


間違ったマシンにメールを配信すると、DNSの問題はどうなりますか?SMTPサーバーを認証する必要があります。これは、DNSとはまったく関係のないSMTP構成の問題です。ここでは、リンゴとオレンジを比較しているわけではなく、放射性バターを塗ったトーストとスティック上の5ミリグラムのラグランジュ誘導体を比較しています。間違ったMXまたはAの結果を取得するのが心配な場合は、DNSが責任を負わないようにするのではなく、DNSSECを使用する必要があります。誤ってSMTPを間違ったRFC1918番号に配信している場合は、ネットワークを誤って設定または設計しました。
ミハイリンバシャン2009

(明確化のために
再掲

ネットワーク上の誰かがIP番号を「作成」した場合、IPプロトコルは設計どおりに機能します。つまり、セキュリティを考慮していません。あなたが求めているのは、「私が実際に話をする相手と話をしていることをどのように信頼できますか?」です。そして、その答えはIPやDNSで配信できません。それに対する答えは、DNSSECやSSL / TLSやアプリケーション層メカニズムによって配信されます。
ミハイリンバザン2009

ただ、Daveの投稿にあなたのコメントを読んで-あなたのポストは今より理にかなって:)私はまだ前提に同意しないが、私はそれはもう...非合理的だとは思わない
ミハイLimbăşan

2
いいえ、認証に関するものではなく、接続が間違った場所で終わるだけです。Verisignが2001年に* .comをワイルドカード化することを決めたとき、私はそれをたくさん見ました。
アルニタック

3

可能性はわずかですが、MITM攻撃のいくつかに備えて設定している可能性があると思います。

私の懸念はこれでしょう。そのメールサーバーを指すように構成されたメールクライアントを持つユーザーの1人が、ラップトップを他のネットワークに接続するとします。他のネットワークでも同じRFC1918が使用されている場合はどうなりますか。そのラップトップは、smtpサーバーへのログインを試行し、ユーザーの資格情報を必要のないサーバーに提供する可能性があります。これは特にあなたがSMTPと言っていて、SSLを必要とする場所については言及しなかったので、本当です。


ユーザーがオフィスや他の場所で使用しているラップトップを持っている場合、MTAの内部IPを指すようにホストファイルを構成するか、MUA構成でIPを直接使用する可能性があります。同じ最終結果。IPv6とRFC1918の死をもたらす、それが確実な唯一の方法です...
ウォンブル

素晴らしい点ゾレダチェ。これは興味深い攻撃ベクトルです。MUAに応じて、通常の「面倒な何かが発生しました。まずクリックしてください」ダイアログボックスが表示されるか、SSL証明書が一致しない場合は完全に失敗する可能性があります。
デイブチェイニー

有効なネットワーク内のすべてのサーバー(つまり、web / HTTPS、IMAP、およびSMTP)がSSL / TLSベースのクライアント接続を必要とする場合、この攻撃シナリオは効果的に排除されますか?
ジョニーユタ

@JohnnyUtahh、すべてのサーバーが有効な証明書を使用してTLSをサポートする必要があり、すべてのクライアントが証明書を検証するように構成され、非TLS接続を試行しないようにする必要があります。これは現在、10年前のより一般的なデフォルトです。しかし、まだtls以外の接続を試みる可能性のある古い/愚かなソフトウェアがあります。
ゾレダチェ

はい、すべてが理にかなっています、@ Zoredacheに感謝します。
ジョニーユタ

3

2つのオプションは/ etc / hostsで、パブリックゾーンにプライベートIPアドレスを配置します。前者をお勧めします。これが多数のホストを表す場合、独自のリゾルバを内部で実行することを検討する必要があります。それほど難しくはありません。


1
それは確かに選択肢ですが、なぜですか?内部リゾルバを実行したり、BINDビューのようなものを使用した(はるかに賢い)場合、管理オーバーヘッドとメンテナンスの負担がなくなります。それは私が理解していないことです。
ミハイリンバシャン2009

1
独自のネームサーバーを実行することは、ロケット科学ではありません。ネットワークが/ etc / hostsの使用をハックまたは時間のかかるものと見なすのに十分なサイズである場合、ネットワークにリゾルバーのペアをセットアップする必要があります。副次的な利点として、ネットワークを出るDNSトラフィックの量を減らし、一般的なクエリの解決を高速化します。
デイブチェイニー

3
私はそれがロケット科学ではないことを知っていますが、それはメンテナンスのオーバーヘッドと潜在的なセキュリティリスクです。確かに、RFC1918ネットワークの存在を漏らすよりも高いセキュリティリスク。DNSトラフィックはごくわずかです-仕事中のDNSで適度に大きい80を超えるビジーゾーンファイルをホストし、毎週のDNSトラフィックはYoutubeの2分未満です。クエリ解決の高速化は、実際に私がここで見たDNSのRFC1918番号に対する最初の中途半端な正論です:)実際の通常のニークジャーク「ああ、いや、それはセキュリティリスクです」反応を少し超えて実際に考えたことに賛成:)
Mihai Limbăşan09年

1
@Alnitak:あなたがどこから来たのかは理解していますが、それはまだDNSの問題ではありません。また、DNSを介して他の場所で発生した問題を修正しようとするのはまったく良い考えではありません。問題は、DNSハッキングによって修正されるのではなく、ソースで修正する必要があります-ハッキングはネットワークを脆弱にします。
ミハイリンバシャン2009

2
ええ、はい、同意します。そして、プライベートDNSの情報をパブリックDNSに置くことは、内部DNSサーバーを持たないという問題に対するハックソリューションです... :)問題は、上位層がこの情報が「プライベート」であることを知らないことです。 。
アルニタック

2

それに微妙な問題があるかもしれません。1つは、DNS Rebind攻撃の一般的なソリューションが、パブリックDNSサーバーから解決されたローカルDNSエントリをフィルタリングすることです。したがって、リバインド攻撃に自分自身を開放するか、ローカルアドレスが機能しないか、より高度な構成が必要です(ソフトウェア/ルーターで許可されている場合)。


+1 DNSリバインドは悪いです!! medium.com/@brannondorsey/...
オハッドシュナイダー

1

hostsファイルに保存することをお勧めします。とにかく1台のマシンのみが接続することになっている場合、パブリックDNSに入れることで何が得られますか?


クラウドで作業すると、数千台のプライベートマシンを使用できます。数年前、Netflixは2,000以上のCassandraノードがあったと述べました。/etc/hosts2,000台のマシンすべてがこれらのIP /名前のペアを管理する必要があるため、ファイルを使用することは実用的ではありません...
Alexis Wilke

1

プライベートで10.0.0.0/8、192.168.0.0/16、または172.16.0.0/12を意味する場合は、しないでください。ほとんどのインターネットルーターは、それが何であるかを認識します。プライベートアドレスは、パブリックインターネットに直接送信されることはありませ。これが、NATの人気を支えました。パブリックDNSサーバーにアクセスしようとすると、DNSからプライベートIPアドレスが取得されますが、パケットはどこにも送信されません。接続がプライベートアドレスにインターネットを横断しようとするため、途中の一部の(正常に構成された)ルーターはパケットをそのまま食べてしまいます。

「外部」から「内部」に届くメールを取得したい場合、ある時点で、パケットがファイアウォールを通過する必要があります。これを処理するDMZアドレスを設定することをお勧めします。これは、設置されているルーター/ファイアウォールによって厳密に制御される単一のパブリックIPアドレスです。あなたが記述する既存のセットアップは、まさにそれを行うように聞こえます。

編集:意図の明確化...(以下のコメントを参照)。これが意味をなさない場合、私は自分の投稿を削除することに投票します。


3
それはすべて素晴らしく真実ですが、DNSでRFC1918アドレスを公開してはならない理由の実際の理由は示していません。RFC1918アドレスとは何かを説明したばかりで、そのうちのいくつかへのルートを持たないことも可能です。他のIP番号とはどう違うのですか?198.41.0.4へのルートを持たないことは可能ですが、DNSで198.41.0.4を公開するのは間違っているということですか?DNSは名前解決システムです。ルーティングとは関係ありません。2つは直交しています。あなたは基本的にFUDに相当する2つのカテゴリの問題を共謀しています。
ミハイリンバシャン2009

1
議論の背景は、パブリック DNSサーバーでプライベートIPアドレスを使用することでした。投稿のポイントは、デフォルトでは、ルーターがプライベートIPアドレスをルーティングしないことを示すことでした。DNSサーバーでプライベートIPアドレスを使用できないことを示すつもりはありませんでしたが、それらのIPアドレスを「外部に」提供しないでください。これが十分に明確でない場合、私は喜んで投稿を撤回します。そうでない場合、私は同意しません、投稿は100%スポットオンです-この人にとっての最終的な効果は、彼らがこれを行うと問題が発生することです。
エイブリーペイン

うなずく Alnitakの投稿の下であなたのコメントはそれをクリアしました:)ありがとう。
ミハイリンバシャン2009

「あなたの公開DNSサーバに接続しようと誰もが唯一のどこにも....にパケットを送信しないように、DNSからのプライベートIPアドレスを取得します」 -いや、あなたが実際に今述べてきたDNSリバインディングとそれが最も安全なルーターのいくつかで動作します私のPepWave Surf SOHOを含む:rebind.network/rebind
Ohad Schneider

0

同様の情報を探していたので、ここに到着しました。多くの人がプライベートIPアドレスを漏らしてもいいと言っていることに驚きました。ハッキングされるという点では、安全なネットワーク上にいる場合でも大きな違いはありません。ただし、DigitalOceanはすべてのローカルネットワークトラフィックをまったく同じケーブルでやり取りしており、誰もが実際に他のすべてのトラフィックにアクセスできます(おそらく中間者攻撃で実行可能です)。情報は確かに私のトラフィックをハッキングするための一歩をあなたに与えます。(現在、各クライアントには、AWSなどの他のクラウドサービスと同様に、専用の予約済みプライベートネットワークがあります。)

そうは言っても、独自のBIND9サービスを使用すると、パブリックIPとプライベートIPを簡単に定義できます。これはview、条件を含む機能を使用して行われます。これにより、自分の内部IPアドレスの1つから質問している場合にのみ、1つのDNSを照会し、内部IPに関する回答を取得できます。

セットアップには2つのゾーンが必要です。選択にはを使用しmatch-clientsます。BIND9を使用したTwo-in-one DNSサーバーからのセットアップの例を次に示します。

acl slaves {
    195.234.42.0/24;    // XName
    193.218.105.144/28; // XName
    193.24.212.232/29;  // XName
};

acl internals {
    127.0.0.0/8;
    10.0.0.0/24;
};

view "internal" {
    match-clients { internals; };
    recursion yes;
    zone "example.com" {
        type master;
        file "/etc/bind/internals/db.example.com";
    };
};
view "external" {
    match-clients { any; };
    recursion no;
    zone "example.com" {
        type master;
        file "/etc/bind/externals/db.example.com";
        allow-transfer { slaves; };
    };
};

ここに外部ゾーンがあり、IPはプライベートではないことがわかります

; example.com
$TTL    604800
@       IN      SOA     ns1.example.com. root.example.com. (
                     2006020201 ; Serial
                         604800 ; Refresh
                          86400 ; Retry
                        2419200 ; Expire
                         604800); Negative Cache TTL
;
@       IN      NS      ns1
        IN      MX      10 mail
        IN      A       192.0.2.1
ns1     IN      A       192.0.2.1
mail    IN      A       192.0.2.128 ; We have our mail server somewhere else.
www     IN      A       192.0.2.1
client1 IN      A       192.0.2.201 ; We connect to client1 very often.

内部ゾーンについては、最初に外部ゾーンを含めます。これがどのように機能するかです。つまり、内部コンピューターの場合は、内部ゾーンにのみアクセスするため、外部ゾーンの定義が必要なので、$includeコマンドは次のようになります。

$include "/etc/bind/external/db.example.com"
@       IN      A       10.0.0.1
boss    IN      A       10.0.0.100
printer IN      A       10.0.0.101
scrtry  IN      A       10.0.0.102
sip01   IN      A       10.0.0.201
lab     IN      A       10.0.0.103

最後に、すべてのコンピューターがそのDNSとそのスレーブを使用するようにする必要があります。静的ネットワークを想定すると、/etc/network/interfacesファイルを編集し、nameserverオプションでDNS IPを使用することを意味します。このようなもの:

iface eth0 inet static
    ...
    nameserver 10.0.0.1 10.0.0.103 ...

これで準備は完了です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.