컴퓨터 A두 가지 물리적 인터페이스가 있습니다.
- eno0 → 192.168.1.1/24
- eno1 ⇒ 192.168.2.1/24
컴퓨터 B물리적 인터페이스는 하나만 있습니다.
- eno0 ⇒ 192.168.2.2/16(비정상적으로 작은 서브넷 마스크에 주목하세요 - 악의적인 사용자가 설정했다고 말할 수 있습니다)
컴퓨터 A의 eno1은 멍청한 스위치를 통해 컴퓨터 B의 eno0에 연결됩니다.
컴퓨터 B에서 실행 하면 ping 192.168.1.1
작동합니다!어떻게 그럴 수 있습니까?
/proc/sys/net/ipv4/ip_forward
두 컴퓨터 모두 0입니다.
두 컴퓨터 모두의 iptables FORWARD 정책은 DROP이며 FORWARD 테이블에는 규칙이 없습니다.
이 두 컴퓨터는 다른 네트워크에 연결되어 있지 않습니다.
두 시스템 모두 6.1.9-arch1-1 커널을 실행하고 있습니다.
더 중요한 것은:이 동작을 방지하려면 컴퓨터 A를 어떻게 구성해야 합니까?192.168.2.0/24 네트워크의 컴퓨터가 192.168.1.1 주소에서 호스팅되는 서비스에 액세스하는 것을 원하지 않습니다.
답변1
TCP/IP 스택을 설계하는 데는 두 가지 기본 접근 방식이 있습니다.강력한 호스트 모델그리고약한 호스트 모델. 약한 호스트 모델을 사용하면 고성능을 얻기가 더 쉽기 때문에 Linux는 기본적으로 약한 호스트 모델을 사용합니다.
역사적으로 이러한 용어는 다음과 같이 알려져 있었습니다.강력한 엔드 시스템(ES) 모델그리고약한 엔드 시스템 모델, 각각.
찾고 있는 동작(= 시스템은 패킷이 들어온 인터페이스에 할당된 특정 IP 주소의 들어오는 패킷에만 응답)은 다음과 같습니다.강력한 호스트 모델, 원하는 경우 몇 가지 구성이 필요합니다.
만약 너라면이 사이트를 "강력 마스터 모드"라는 키워드로 검색해 보세요에서 설정 방법에 대한 많은 질문과 자세한 답변을 찾을 수 있습니다.
답변2
컴퓨터 B는 IP 주소가 지정된 서브넷의 링크에 있다고 믿기 때문에 해당 인터페이스에서 ARP 요청을 보냅니다.
기본적으로 Linux는 인터페이스에 관계없이 시스템에 구성된 모든 IP 주소에 대한 ARP 요청에 응답합니다.
이것이 원하는 것이 아니라면 구성 net.ipv4.conf.all.arp_filter
이나 net.ipv4.conf.eno1.arp_filter
sysctl 항목이 필요합니다(문서화됨).커널 문서). 이를 1로 설정하면 arp가 인터페이스의 주소로 제한됩니다.
컴퓨터 B에 192.168.1.1에 대한 정적 ARP 항목이 있다고 가정하면(또는 게이트웨이가 192.168.2.1인 올바른 서브넷이 있음) 이전 항목은 도움이 되지 않습니다. 이러한 요청을 차단하려면 방화벽을 설정해야 할 것 같습니다. IP 주소는 컴퓨터 A가 소유하므로 컴퓨터 A는 이러한 패킷이 어떤 인터페이스에서 왔는지에 관계없이 FORWARD가 아닌 INPUT으로 간주합니다.
답변3
당신이 설명하는 것은 iptables, 전달 등에 의존하지 않습니다.
여기서는 넷마스킹, 게이트웨이 및 라우팅이 문제입니다. 말씀하신 대로 컴퓨터에는 16비트 넷마스크가 있습니다. 이는 네트워크 192.168.XX의 모든 컴퓨터가 그의 "로컬" 네트워크에 있음을 의미합니다. 네트워크의 컴퓨터에 대한 ping은 게이트웨이를 통과하지 않고 해당 네트워크의 어댑터로 직접 이동합니다. 넷마스크에 따르면 192.168.1.1은 192.168.2.1 어댑터 네트워크에 있으므로 해당 어댑터에 직접 ping을 보냅니다.
하나의 어댑터에서 트래픽을 수신하고 이를 다른(또는 동일한) 어댑터로 전달해야 하는 경우 전달이 중요하지만 귀하의 경우에는 전달이 없습니다.