다른 서브넷의 인터페이스에 대한 핑 차단

다른 서브넷의 인터페이스에 대한 핑 차단

현재 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을 수행할 수도 있는데, 이는 내 생각에 보안 결함입니다. 명확히 하기 위해 편집: 라우터는 이 두 서브넷 사이를 라우팅합니다. 서버를 라우터의 포트 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는 이를 수행할 수 있지만 추가적인 논리적 글루 체인에서 두 번 사용해야 합니다.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만 일치시키고 반환합니다(즉, 아무 작업도 수행하지 않음). 두 번째 규칙은 모든 로컬 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이런 일이 일어나지 않도록.

관련 정보