他のサブネットのインターフェイスへのpingをブロックする

他のサブネットのインターフェイスへのpingをブロックする

現在、DD-WRTルータのファイアウォールルールを改善しています。特に私の質問はこの規則に関するものです。

iptables -I INPUT -i eth1.10 -d ! 192.168.10.0/28 -j DROP

インターフェイスがeth1.10(192.168.10.1/28)インターフェイスに直接送信されたICMP要求にのみ応答するように、インターフェイスレベルでルールを何らかの方法で強制できるかどうか疑問に思います。このルールがないと、eth1(192.168.1.1/24)はeth1.10を介してpingを実行することができます。これは私の考えのセキュリティ上の欠陥です。明確にするために編集:ルータはこれら2つのサブネット間をルーティングします。サーバーをルーターのポート4に接続できるように、ルーターの背面にある4つのポートを取り外しました。その後、ポート4をeth1.10に接続し、eth1をLANで使用されている他の3つのポートに接続しました。 192.168.10.0から192.168.1.0ネットワークを完全に分離したいのですが...

# SwitchPort Setup script
swconfig dev switch0 set enable_vlan 1 
swconfig dev switch0 vlan 1 set ports "2 3 4 6"
swconfig dev switch0 vlan 10 set ports "1 6t" 
swconfig dev switch0 set apply 
vconfig add eth1 10
ifconfig eth1.10 192.168.10.1 netmask 255.255.255.240

ベストアンサー1

(スイッチ設定をすべて理解していないことは認めますが、質問には関係ありません。)

フィルタ/INPUTの現在のルールは、eth1.10のパケットが到着するのを防ぎます。ルーター192.168.10.0/28 以外の IP では、eth1.10 の IP が 192.168.1.1 にアクセスすることを許可しない望ましい効果があります。

  • なぜ必要ですか?

    これは、複数のインターフェースを持つLinuxシステムがそのIPをプールとして処理し、すべてのインターフェースですべてのIPを使用できるためです。これにはルーティング(配信)は含まれません。この問題を解決するために私が知っている唯一の方法は次のとおりです。iptables'フィルタ/入力。

  • 一般性を維持するためにこのルールでIPを指定したくない場合はどうすればよいですか?

    具体的な内容がありますiptables 拡張matchはこれを実行できますが、追加の論理グルーチェーンで2回使用する必要があります。addrtypeその有無にかかわらずオプション--limit-iface-in。したがって、ルールを置き換え、インターフェイス名にのみ依存するルールを持つことができます。

    iptables -N dropotherlocalips
    iptables -A dropotherlocalips -i eth1.10 -m addrtype --dst-type LOCAL --limit-iface-in -j RETURN
    iptables -A dropotherlocalips -i eth1.10 -m addrtype --dst-type LOCAL -j DROP
    iptables -I INPUT -j dropotherlocalips
    

    最初のルールは、同じインターフェイスのローカルIPのみを一致させて返します(つまり、何もしません)。 2番目のルールはすべてのローカルIPを削除するため、同じインターフェイスにないローカルIPは最終的に削除されます。

    このルールをすべての点でより一般的で有効にしたい場合は、-i eth1.10dropotherlocalipsからそれらを削除できます。

    iptables -A dropotherlocalips -m addrtype --dst-type LOCAL --limit-iface-in -j RETURN
    iptables -A dropotherlocalips -m addrtype --dst-type LOCAL -j DROP
    

    eth1これにより、ping 192.168.10.1もブロックされます。

192.168.10.0から192.168.1.0ネットワークを完全に分離したいのですが...

これを行うには、次のようにフィルタ/配信ルールも追加する必要があります(ただし、すでにそうしていませんか?)。

iptables -I FORWARD -i eth1.10 -d 192.168.1.0/24 -j DROP

eth1.10 が禁止されていない限り、ルールで LAN 宣言を回避する方法はここでは参照できません。どの目的地ですが、ルーティングはまったく必要ありません。または、FORWARDにはDROPポリシーがあり、ルールに明示的に作成されたルーティング/転送のみを許可できます。

これらの規則によれば、192.168.1.1を含むeth1.10のIPレベルでは、192.168.1.0/24を完全に使用することはできません。


追加のクイック選択: ARPeth1.10 LANに192.168.1.1の存在を知らせることは依然として可能です。

上記のルールは、eth1.10の背後にあるホストをブロックしません。知る(例えば、無差別走査による)、ARPを介して192.168.1.1の存在が発見され、フィルタリングされない。iptables。これは、LinuxがすべてのIPをプール(プール)として扱うためです。基本arp_filter設定、下記もご覧ください。arp_announceそしてarp_ignore)。だから使用アルペジオ192.168.10.0/28(eth1.10からルーターまで)のLinuxシステム、インターフェースeno1(名前を調整してください):

$ ping -c2 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.

--- 192.168.1.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 10ms

$ ip neighbour
192.168.10.1 dev eno1 lladdr b6:f2:aa:82:21:d4 REACHABLE
$ arping -c2 -I eno1 192.168.1.1
ARPING 192.168.1.1 from 192.168.10.10 eno1
Unicast reply from 192.168.1.1 [B6:F2:AA:82:21:D4]  0.552ms
Unicast reply from 192.168.1.1 [B6:F2:AA:82:21:D4]  0.552ms
Sent 2 probes (1 broadcast(s))
$ 

MACアドレスは同じであるため、これは192.168.1.1が192.168.10.1のホスト:ルーターにあることを意味します。

これを防ぐための最小設定(複雑なルーティング設定が不要な場合arp_filter)はルータにあります。

echo 1 > /proc/sys/net/ipv4/conf/eth1.10/arp_ignore=1

(またはsysctl -w net.ipv4.conf.eth1/10.arp_ignore=1

それが出身です。arp_ignore:

1 - 宛先IPアドレスが着信インターフェイスで設定されたローカルアドレスである場合にのみ応答します。

また、使用することができますarp_filter=1(すでにテーブルを使用してリンクしている場合にのみ価値がありますip rule。とにかくそれを行う必要があるためです。)またはフィルタリングされたARPリクエストを使用することもできます。arptablesこのようなことが起こらないように。

おすすめ記事