質問: iptablesのデフォルトポリシーを `drop`に設定することと、入力チェーンに個別のポリシーを挿入してすべての接続をdropすることの違い 特定のネットワークからの場合を除いて、サーバーへのすべての着信接続をドロップしようとしています。同時に、サーバーから外部ネットワーク(任意のプロトコルを介した任意のネットワーク)へのすべての発信接続を開いたままにしておきたい。 inputチェーンに以下の2つの変更を加えることで機能しています。注:テストは、192.168.0.0/24ネットワーク上のipを持つ3台のサーバー(vm)で行われ、すべてのルールはserver3(ip:192.168.0.3)で定義されていますa. iptables -p input drop b. iptables -a input -s 192.168.0.0/24 -j accept [root@server3 ~]# iptables -nvl chain input (policy drop 124 packets, 22308 bytes) pkts bytes target prot opt in out source destination 265 34603 accept all -- * * 192.168.0.0/24 0.0.0.0/0 chain forward (policy drop 0 packets, 0 bytes) pkts bytes target prot opt in out source destination chain output (policy accept 433 packets, 34693 bytes) pkts bytes target prot opt in out source destination しかし、私の最初の質問: 上記の最初のルールを定義したとき(inputチェーンのデフォルトポリシーを変更したとき)、サーバー(ip:192.168.0.3)からのすべての発信接続(ssh、ping)も停止しました。デフォルトのoutputチェーンポリシーがまだ受け入れられていて、outputチェーンの下にルールが定義されていないのに、なぜこれが発生するのですか? 次のように、inputチェーンのデフォルトポリシーを変更しないことで同じことを実現したかったのです。c. iptables -i input -j drop d. iptables -a input -s 192.168.0.0/24 -j accept ただし、サーバーとの間のすべての着信/発信接続はブロックされます3。これは私の2番目の質問に私をもたらします: ルールはどうですかc.およびa.動作が異なりますか?私はlinuxファイアウォールを初めて使用するので、理解に役立ててください。
回答: デフォルトのdropinputポリシーがある場合、送信接続からのresponseパケットでさえドロップされます。それらを受け入れるには、次の入力ルールを追加します。iptables -i input 1 -m conntrack --ctstate established,related -j accept 最後の質問として、c and dの例(これらのコマンドの前に空のルールがあると仮定)では、最初のルールdrop everythingとsecondルールを設定しています。特定のネットワーク。 iptablesはできるだけ早く一致を取得するため、最初のルールは常に一致し(条件が設定されていない)、それ以降のすべてのルールは実行されません。ルールの例外を定義する必要があります前ルール。最初の例-p input dropでは、以前に一致しなかったものをすべてキャッチするlastルールを設定しているため、追加された例外はすべて、そのデフォルトルール(-p)の前に実行されます。 。-iは特定の位置に挿入します(たとえば、前のコマンドでは、established、relatedルールを最初に設定しているので、その後に何を設定しても一致します。-aがルールリストに追加されるため、デフォルトの直前に一致する場合。明示的なルール(c and dなど)を使用して最初の例と同じことを実現したい場合は、それらの位置を交換する必要があります。