特定のネットワークからの場合を除いて、サーバーへのすべての着信接続をドロップしようとしています。同時に、サーバーから外部ネットワーク(任意のプロトコルを介した任意のネットワーク)へのすべての発信接続を開いたままにしておきたい。 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チェーンのデフォルトポリシーを変更しないことで同じことを実現したかったのです。
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
など)を使用して最初の例と同じことを実現したい場合は、それらの位置を交換する必要があります。