Переадресация портов не работает с iptables

Переадресация портов не работает с iptables

В качестве шлюзового сервера я использую CentOS 7. Он имеет два сетевых интерфейса, ens28 и ens29.

Ens28 использует частную сеть 192.168.xx, она рассматривается как WAN. Ens29 — это область LAN с подсетью 172.16.0.0.

Я настроил конфигурацию NAT через iptables, чтобы хосты в подсети 172... могли получить доступ к Интернету.

Теперь я хочу, чтобы хост в подсети 172 транслировал свой веб-сервер на порт 443.

Моя базовая конфигурация до переадресации портов:

# Generated by iptables-save v1.4.21 on Mon Nov 30 21:45:11 2020
*nat
:PREROUTING ACCEPT [65:4705]
:INPUT ACCEPT [1:60]
:OUTPUT ACCEPT [1:72]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o ens28 -j MASQUERADE
COMMIT
# Completed on Mon Nov 30 21:45:11 2020
# Generated by iptables-save v1.4.21 on Mon Nov 30 21:45:11 2020
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [24:4585]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -i ens28 -o ens29 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ens29 -o ens28 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Что касается пересылки, я попробовал следующие правила:

iptables -A PREROUTING -t nat -i ens28 -p tcp --dport 443 -j DNAT --to 172.16.0.202:443
iptables -A FORWARD -p tcp -d 172.16.0.202 --dport 443 -j ACCEPT

Моя конфигурация iptables после добавления новых правил:

# Generated by iptables-save v1.4.21 on Tue Dec  1 15:39:36 2020
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [434:52068]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -i ens28 -o ens29 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ens29 -o ens28 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -d 172.16.0.202/32 -p tcp -m tcp --dport 443 -j ACCEPT
COMMIT
# Completed on Tue Dec  1 15:39:36 2020
# Generated by iptables-save v1.4.21 on Tue Dec  1 15:39:36 2020
*nat
:PREROUTING ACCEPT [297:55943]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [7:532]
:POSTROUTING ACCEPT [7:532]
-A PREROUTING -i ens28 -p tcp -m tcp --dport 443 -j DNAT --to-destination 172.16.0.202:443
-A POSTROUTING -o ens28 -j MASQUERADE
COMMIT
# Completed on Tue Dec  1 15:39:36 2020
  1. IP-адрес хоста веб-сервера — 172.16.0.202.
  2. Адрес карты ens28 — 192.168.1.254.
  3. Адрес карты ens29 — 172.16.0.253.

Порт 443 перенаправлен на внешний маршрутизатор (192.168.1.0 > публичный IP) и виден из Интернета.

Пересылка включена в sysctl:

net.ipv4.ip_forward = 1

Так что я упускаю? Почему не работает переадресация с 172...?

Заранее спасибо.

решение1

Правила проверяются по одному.
Каждое правило после отклонения будет игнорироваться.

Вам следует инвертировать

-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -d 172.16.0.202/32 -p tcp -m tcp --dport 443 -j ACCEPT

к

-A FORWARD -d 172.16.0.202/32 -p tcp -m tcp --dport 443 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

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