2개의 서브넷에서 IPtables 스푸핑

2개의 서브넷에서 IPtables 스푸핑

내 방화벽 eth1로 들어가는 2개의 서브넷의 패킷이 있습니다.

10.111.12.0/24 및 10.10.100.0/24

나는 다음과 같이 iptables 규칙을 설정했습니다.

 iptables -A INPUT -i eth1 ! -s 10.111.12.0/24 -j DROP
 iptables -A INPUT -i eth1 ! -s 10.10.100.0/24 -j DROP

하지만 - 첫 번째 규칙은 10.10.100.0/24가 10.111.12.0/24가 아니고 첫 번째 규칙과 일치하기 때문에 두 번째 규칙을 확인하는 것을 허용하지 않습니다. 어떻게 고치나요?

답변1

이를 수행하는 가장 쉬운 방법은 허용된 패킷을 표시하고 나중에 표시되지 않은 모든 패킷을 삭제하는 것입니다.

iptables -t mangle -A PREROUTING -i eth1 -s 10.111.12.0/24 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -i eth1 -s 10.10.100.0/24 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -i eth1 -m mark ! --mark 1 -j DROP

통과해야 하거나 통과하려는 다른 패킷이 있을 수 있다는 점을 고려해야 합니다.

답변2

여기서는 체인이 유용한 방법이 될 것입니다. 체인은 서브루틴이나 함수처럼 작동합니다. RETURN은 해당 패킷에 대한 제어가 이전 체인으로 돌아가고 규칙이 계속 평가된다는 것을 의미합니다.

# create a new chain
iptables -t filter -N in_validnet

# all incoming packets on eth1 are evaluated by the chain
iptables -t filter -A INPUT -i eth1 -j in_validnet

# packets from these networks are returned for further evaluation
iptables -A in_validnet -s 10.111.12.0/24 -j RETURN
iptables -A in_validnet -s 10.10.100.0/24 -j RETURN

# everything else gets dropped
iptables -A in_validnet -j DROP

관련 정보