У меня есть шлюз, подключенный к нескольким внутренним сетям, в которых я хотел бы настроить NAT. Однако загвоздка в том, что эти сети необходимо изолировать друг от друга, чего я не мог понять. Вот моя конфигурация:
eth0: 192.168.1.0/28 (восходящий поток), шлюз назначен 192.168.1.1
eth1: 192.168.1.16/28 (нисходящий поток 1), шлюз назначен 192.168.1.16
eth2: 192.168.1.32/28 (нисходящий поток 2), шлюз назначен 192.168.1.32
Пока что я настроил iptables, чтобы разрешить цепочки по умолчанию:
iptables -P INPUT ALLOW
iptables -P OUTPUT ALLOW
iptables -P FORWARD ALLOW
Затем я включил переадресацию IP в ядре и настроил iptables:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.1
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth2 -o eth0 -j ACCEPT
Однако эта конфигурация позволяет одной машине на eth1 получить доступ к другой машине на eth2, хотя я явно не указал правило, разрешающее это. Как мне изолировать эти сети или разрешить доступ только к определенным хостам / портам?
Вы устанавливаете политику FORWARD
цепь к ALLOW
, поэтому, даже если ничего в цепочке не совпадает, трафик будет разрешен.
Вам, вероятно, следует установить его на DROP
вместо.
Как отмечалось в ответе М. Хэмптону, для работы NAT необходимо сохранить функцию пересылки.
В качестве быстрого взлома я бы попытался заблокировать пересылку между внутренними подсетями, например. добавьте эти команды к себе:
iptables -A FORWARD -i eth1 -o eth2 -j DENY
iptables -A FORWARD -i eth2 -o eth1 -j DENY
Это будет беспорядочно с 3 внутренними подсетями, так как у вас будет 6 правил блокировки, и довольно страшно для 4 :).