web-dev-qa-db-ja.com

ループバックのiptablesルール

誰かがloopbackインターフェイスへのトラフィックをフィルタリングするための次のルールを説明できますか?

# Allow all loopback (lo0) traffic and reject traffic
# to localhost that does not originate from lo0.
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT

私がそれを解釈する方法:

  1. loopbackへのすべての着信パケットを受け入れます。

  2. loopback宛てでない127.x.x.x.xからのすべての着信パケットを拒否します。

これらのルールの実用的な用途は何ですか? 1の場合、これはloopbackへのすべてのパケットが追加のフィルタリングを通過する必要がないことを意味しますか? loopbackへの着信パケットが外部ソースからのものである可能性はありますか?

5
Joey

ルールの意味はまさにあなたが説明していることです、

1)ループバックインターフェイスからアクセスされるすべてのパケット。
2)他のソースから受け入れられたループバックアドレスを持つパケットはありません。

ループバックインターフェイスからのデータ自体が追加のフィルタリングを通過する必要があるという意味ではありません。それが何を意味するかというと、ルール2)は、他のインターフェイスからのループバックアドレスを持つ偽造/スプーフィングされたパケットを防止しようとしているということです。

4
Rui F Ribeiro

最初のルールは、ループバックインターフェイスに到達するすべてのトラフィックを受け入れるために必要です(他のホストからのトラフィック-LANまたはインターネット-実際の物理NICに到達)

だが!ルールが完了していません。デフォルトの出力ポリシーがある場合は、すべてドロップします。

iptables -P OUTPUT DROP

ループバックインターフェイスはトラフィックを受け入れることができますが、出力ポリシーで許可されていないため、システムはループバックからトラフィックを送信できません。

このため、出力ポリシーを定義する必要があります。

iptables -P OUTPUT ACCEPT

または、ループバックインターフェイスのみのルールを定義します。

iptables -A OUTPUT -o lo -j ACCEPT

2番目のルールは、ループバックインターフェイスではない(LANインターフェイスやインターネットからなど)に到達し、ソースアドレスがループバックであるパケットをドロップするために必要です。これはスプーフィング対策です。

ホストにインターネットに直接接続されているインターフェースがある場合、このインターフェースへのプライベート送信元アドレスを持つパケットの受信を防ぐルールを追加できます。

192.168.0.0/16ネットワークの例:

iptables -A INPUT -s 192.168.0.0/16 -j DROP

追加の質問に対する回答:

  1. article にwww.linode.comにView Your Current iptables Rulesの章があります。この章で言う:

つまり、着信、転送、発信のすべてのトラフィックが許可されます。着信トラフィックと転送トラフィックを必要なものだけに制限することが重要です。

OK。デフォルトでは、すべてのトラフィック(出力、入力、転送)を許可します。しかし、システムがデフォルトのルールを使用しない場合はどうなりますか?デフォルトのルールが変更され、これを忘れた場合はどうなりますか?このため、各iptablesスクリプトでデフォルトルールを設定することをお勧めします。

iptables -P OUTPUT ACCEPT

Iptablesによると、デフォルトのポリシーを設定してすべてを受け入れ、最後のルールのすべてのトラフィックを(必要に応じて)拒否することをお勧めします。

  1. はい。これはまさに私が言ったことです。この記事のスクリプトでは、デフォルトのポリシーを使用してすべてのトラフィックを拒否しています。

#その後、それらを拒否します。

-A入力-j拒否

-Aフォワード-j REJECT

-A出力-j拒否

2
Egor Vasilyev