Назад | Перейти на главную страницу

Настройка NAT для нескольких изолированных сетей с помощью iptables

У меня есть шлюз, подключенный к нескольким внутренним сетям, в которых я хотел бы настроить 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 :).