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

вопрос iptables

У меня небольшая сеть с одним действующим IP и брандмауэром с 3 сетевыми интерфейсами (LAN, WAN, DMZ).

Вопрос:

в приведенном выше сценарии я не могу из своей локальной сети получить доступ к моему http-серверу в DMZ, поскольку он имеет IP-адрес, используемый MASQ (единственный действительный IP-адрес, который у меня есть). Как лучше всего решить эту проблему?

сетевые интерфейсы:

Похоже, у вас просто стандарт шпилька NAT вопрос.

Распространенное решение проблемы - предоставить вашему хосту в DMZ частный IP-адрес в другой подсети и настроить разделенный DNS. Вы передаете частный адрес внутренним хостам, а внешние хосты получат публичный адрес. Затем у вас есть правила брандмауэра, позволяющие внутренним клиентам подключаться к частной подсети DMZ, и у вас есть NAT и правило для пересылки с адреса / порта на веб-сервер в вашей DMZ.

В качестве примера проблемы, которая может быть вызвана топологией - если ваши внутренние сети DMZ и LAN используют перекрывающиеся подсети, это может вызвать проблему, которую вы видите, потому что машина LAN не будет отправлять пакеты, предназначенные для машины DMZ, на брандмауэр. / default route (поскольку он будет думать, что машина DMZ является локальной).

Тем не менее, вы сказали, что переход из вашей локальной сети в 1.1.1.1:80 не работает. Это имеет смысл, потому что ваше правило DNAT ограничено пакетами, которые поступают в eth0 (-i eth0), поэтому оно не будет пакетов DNAT, исходящих от eth2 и направляющихся на 1.1.1.1:80. Я не вижу веских причин ограничивать это правило PREROUTING конкретным интерфейсом Ethernet.

Удар 2.2.2.2:80 работает с хоста LAN?

Я немного запутался в вашем объяснении. Поэтому я просто использую здесь пример сценария:

  • eth0 = WAN = 123.11.22.33
  • eth1 = DMZ = 192.168.1.0/24
  • eth2 = LAN = 172.16.0.0/16

И веб-сервер предоставляется 192.168.1.55

# First, allow LAN & DMZ to access the outside world
-t nat -A POSTROUTING -o eth0 -j MASQUERADE
# Now, allow outside access to the webserver
-t nat -A PREROUTING -i eth0 -d 123.11.22.33 -p tcp --dport 80 -j DNAT --to 192.168.1.55:80
# Finally, allow forwarding
-A FORWARD -m state --state ESTABLISHED -j ACCEPT
-A FORWARD -d 191.168.1.55 -p tcp --dport 80 -j ACCEPT
-A FORWARD -i eth1 -j ACCEPT
-A FORWARD -i eth2 -j ACCEPT

Если вам нужна дополнительная безопасность, вы можете расширить две последние строки выше, например:

-N eth1_fwd
-N eth2_fwd
-A FORWARD -i eth1 -g eth1_fwd
-A FORWARD -i eth2 -g eth2_fwd
-A eth1_fwd -s ...... -j ACCEPT
...
-A eth2_fwd -s ...... -j ACCEPT
...

Надеюсь это поможет. Не забудьте добавить маршрут по умолчанию к шлюзу по умолчанию eth0 :)

изменить: упс, неправильные ifaces в более поздних правилах