web-dev-qa-db-ja.com

iptablesを保守しやすくする

ホワイトリストに登録されているいくつかのサイトを除いて、私のネットワークは完全にロックダウンされています。これはすべて、次のようなiptablesを介して行われます。

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 101.102.103.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 101.102.103.0/24 -j ACCEPT
...

明らかに、これらのアドレスは架空のものですが、あなたはそのアイデアを理解しています。ファイアウォールが巨大化しています。これを行うことができれば、メンテナンスがはるかに簡単になります。

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d google.com -j ACCEPT
iptables -A zone_lan_forward -p udp -d google.com -j ACCEPT

man iptablesさんのコメント:

アドレスは、ネットワーク名、ホスト名(DNSなどのリモートクエリで解決する名前を指定することは非常に悪い考えです)、ネットワークIPアドレス(/マスク付き)のいずれかです。 、またはプレーンIPアドレス。

しかし、私が心配しているのは、「解決する名前を指定する... DNSは本当に悪い考えです」と言っている部分です。なぜこれが悪い考えなのですか?すべてを遅くするだけですか?

Iptablesルールで実際にホスト名を使用するべきではない場合、ファイアウォールを簡素化するにはどうすればよいですか?

14
Big McLargeHuge
  • DNS名は、パケットがチェックされるときではなく、ルールが追加されるときに解決されます。これは、ほとんどの人の期待に反します。
    • ルールは、変更されたDNS結果を反映するように更新されません。追加すると解決し、それだけです。定期的にルールをリロードする必要があります。そうしないと、一部のサイトが機能しなくなる可能性があります。
  • 基本的にファイアウォールルールの制御を外部エンティティに委任しているため、セキュリティ上の問題が少しあります。
    • 親DNSサーバーが危険にさらされており、誤ったデータを返す場合はどうなりますか。

HTTPアクセスをブロックすることが目的である場合は、通常、そのレベルでフィルタリングするように設計されたソフトウェア(squid + squidquardなど)を設定する方がはるかに優れています。

28
Zoredache

ファイアウォールでホスト名を使用する場合、ファイアウォールはDNSに依存するようになりました。これにより、ファイアウォールに多くの問題が発生します。

  • 大量のDNSルックアップはレイテンシを引き起こす可能性があります。
  • DNSの変更はすぐには反映されません。したがって、ファイアウォールがキャッシュされたIPを使用している可能性があります。
  • DNSは、なりすまし、ハイジャック、ハッキングされる可能性があります。
  • DNSが失敗する可能性があります-つまり、ファイアウォールが失敗します。
  • ファイアウォールルールがサードパーティによって制御されるようになりました。

ホスト名を使用していて、DNSを制御していない場合、他の誰かがIPtablesルールを効果的に制御します。間違い、エラー、またはセキュリティ上の問題が発生すると、問題が発生します。

ホスト名が上手く使われているのを目にしたのは、内部操作のためだけです。 DHCP経由でIPとホスト名が割り当てられているオフィスで働いていました。ファイアウォールはホスト名を使用して、異なるグループ間に障壁を設けました。これはすべて内部で制御されていたため、うまく機能しました。

10
jeffatrackaid

Shorewallなどのiptablesのラッパーを使用して、ルールを管理しやすくすることができます。

3
Jure1873

他の人がすでに言ったように、iptablesルールではDNS解決可能な名前を使用しないでください。それらは不正確であり、サードパーティによって管理されており、通常は悪いこと(tm)です。また、iptablesサービスの開始時にDNSが失敗するか到達不能になる可能性があることも付け加えておきます。その場合、ルールはまったく追加されず、まったく新しいタイプの問題が発生する可能性があります(再起動後にsshアクセスが失われるなど)。

あなたができることは:

  1. カスタムチェーンを使用してルールを論理的に分離する
  2. ipsetsを使用して、アドレスをグループ化し、ルールから分離します
  3. ルールにコメントを追加する

また、DNSによってnotで解決されるホスト名について悪いことを言った人はいません(つまり、hostsで指定されています。本当に必要な場合は、それらを使用できます。

2
skarap

/ etc/hostsで手動でホスト名を手動でIPに割り当て、それをiptablesで使用します。

このように

  1. ファイアウォールルールを外部エンティティにオフロードしないでください
  2. 簡単にメンテナンスできるiptablesを持っている
2
T4cC0re