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

Как перенаправить порты в DMZ с помощью iptables и отдельного модема

У меня сеть выглядит так:

 ADSL          VLAN 2              VLAN 3
------[Modem]----------[firewall]----------[intranet PC]
                            |
                            |      VLAN 4
                             \-------------[DMZ server]

Я хочу настроить переадресацию портов, чтобы открыть доступ в Интернет к веб-серверу в DMZ. IP-адреса:

Я открыл порты 80 и 443 на модеме и перенаправил их на брандмауэр (192.168.0.126). И у меня в iptables на межсетевом экране есть эти правила:

NAT:

-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A PREROUTING -d 192.168.0.126/32 -p tcp -m multiport --dports 80,443 \
    -j DNAT --to-destination 192.168.2.2
-A PREROUTING -d 192.168.1.1/32 -p tcp -m multiport --dports 80,443 \
    -j DNAT --to-destination 192.168.2.2
-A POSTROUTING -o eth0.2 -j MASQUERADE

Пересылка:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

# Disallow new connections from DMZ to modem and intranet
-A FORWARD -d 192.168.0.0/16 -i eth0.4 -m state --state NEW -j DROP

# Allow intranet to access Internet
-A FORWARD -i eth0.3 -o eth0.2 -j ACCEPT
-A FORWARD -i eth0.2 -o eth0.3 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow DMZ to access Internet
-A FORWARD -i eth0.4 -o eth0.2 -j ACCEPT
-A FORWARD -i eth0.2 -o eth0.4 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow web ports to DMZ
-A FORWARD -i eth0.2 -o eth0.4 -p tcp -m multiport --dports 80,443 -j ACCEPT

# Allow intranet to access DMZ
-A FORWARD -i eth0.3 -o eth0.4 -j ACCEPT
-A FORWARD -i eth0.4 -o eth0.3 -m state --state RELATED,ESTABLISHED -j ACCEPT

Вроде все работает, кроме переадресации портов. Если я открываю 192.168.1.1 в браузере с ПК во внутренней сети, я вижу сервер DMZ. А в телнете это выглядит так:

$ telnet 192.168.1.1 80
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'

Но если я попытаюсь открыть его из Интернета, используя внешний IP-адрес модема, я получу следующее:

$ telnet <EXT_IP> 80
Trying <EXT_IP>...
telnet: Unable to connect to remote host: No route to host

Я попытался настроить NAT, как описано в ответ на этот аналогичный вопрос, но изменений не было. Возможно, я использовал неправильные адреса.

Итак, два вопроса :)

  1. Почему входящие соединения не видят сервер DMZ?
  2. Моя конфигурация iptables в целом в порядке? Или я должен куда-то по умолчанию сбрасывать пакеты?

Брандмауэр работает под управлением Debian Jessie, Linux 3.16.

Я чувствую себя смущенным. Правила брандмауэра работают нормально, но порт 80 был заблокирован провайдером.