내 방화벽 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