Подмена Iptables из 2 подсетей

Подмена Iptables из 2 подсетей

У меня есть пакеты из 2 подсетей, поступающие в мой брандмауэр eth1:

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

Связанный контент