iptables는 호스트 자체의 다른 IP로의 전달을 차단하지 않습니다.

iptables는 호스트 자체의 다른 IP로의 전달을 차단하지 않습니다.

게이트웨이로 사용되는 호스트가 있습니다.

net.ipv4.conf.all.rp_filter=0

대신 사용되는 iptables rpfilter

iptables -t raw -A PREROUTING -m rpfilter --invert -j LOG-DROP-RP

내 호스트에는 IP 10.0.0.1/8의 eth1과 IP 192.168.0.1/16의 eth2 인터페이스가 2개 있습니다.1삭제되고 기록된 패킷을 전송합니다. 전달 테이블은 eth1과 eth2 사이의 패킷 전달도 차단합니다.1eth의 경우 192.168.0.2로2전달 규칙에 의해 차단되고 기록됩니다.

그러나 eth에서 IP 10.0.0.2를 가진 호스트인 경우1192.168.0.1로 패킷을 보내면 rpfilter가 전달 테이블도 무시하는 것 같습니다.

이를 방지하려면 어떻게 해야 합니까? 이 호스트에 개인 서비스가 수신 대기하는 개인 인터페이스 eth3이 있을 수 있고 원치 않는 곳 어디에서나 액세스할 수 있기 때문입니다.

답변1

리눅스는 약한 것을 사용한다호스트 모델: 모든 인터페이스에 할당된 IP 주소는 전체적으로 호스트에 속합니다. 10.0.0.2에서 192.168.0.1에 도달하면 대상 주소가 호스트에 속하므로 전달이 필요하지 않습니다. 패킷은 필터/INPUT에 의해 처리되지 않습니다. by filter/FORWARD(따라서 이 패킷에 대해서는 평가되지 않음) 패킷 이동에 대한 자세한 회로도를 찾을 수 있습니다.거기.

이는 라우팅 이상이 아니므로 트리거되지 않습니다.엄격한 역방향 경로 전달,라우팅 스택또는iptables'에스rpfilter기준 치수.

따라서 이를 여전히 IP 주소에 추가하려면 명시적인 규칙을 추가해야 합니다.날것의테이블,주소 유형일치는 대상이 로컬인지(또는 브로드캐스트인지) 확인하기 위해 작동합니다. SRPF 테스트 후에 다음 규칙을 추가할 수 있습니다(단지 .1 IP 주소가 아닌 여러 IP 주소가 호스트에 할당된 경우 작동함).

iptables -t raw -A PREROUTING -s 10.0.0.0/8 ! -d 10.0.0.0/8 -m addrtype --dst-type LOCAL,BROADCAST -j DROP
iptables -t raw -A PREROUTING -s 192.168.0.0/16 ! -d 192.168.0.0/16 -m addrtype --dst-type LOCAL,BROADCAST -j DROP

나는 모른다iptables사용 중인 특정 주소와 관련된 세부 정보를 포함하지 않는 일반 규칙을 추가하는 방법은 다음과 같습니다.nftables:

# drop packets to address not configured on incoming interface
filter prerouting fib daddr . iif type != { local, broadcast, multicast } drop

관련 정보