Ich verwende ein CentOS 7 als Gateway-Server. Es hat zwei Netzwerkschnittstellen, ens28 und ens29.
Ens28 verwendet ein privates 192.168.xx-Netzwerk und wird als WAN betrachtet. Ens29 ist der LAN-Bereich mit einem 172.16.0.0-Subnetz.
Ich habe eine NAT-Konfiguration über iptables konfiguriert, sodass die Hosts im Subnetz 172... auf das Internet zugreifen können.
Jetzt möchte ich, dass ein Host im Subnetz 172 seinen Webserver auf Port 443 überträgt.
Meine Grundkonfiguration vor der Portweiterleitung:
# 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
Was die Weiterleitung betrifft, habe ich es mit diesen Regeln versucht:
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
Meine iptables-Konfiguration nach dem Hinzufügen der neuen Regeln:
# 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
- Die IP-Adresse des Webserver-Hosts lautet 172.16.0.202
- Die Adresse der ens28-Karte lautet 192.168.1.254
- Die Adresse der ens29-Karte lautet 172.16.0.253
Port 443 wird auf dem externen Router weitergeleitet (192.168.1.0 > öffentliche IP) und ist vom Internet aus sichtbar.
Die Weiterleitung wird in sysctl aktiviert:
net.ipv4.ip_forward = 1
Was übersehe ich also? Warum funktioniert die Weiterleitung von der 172... nicht?
Dank im Voraus.
Antwort1
Regeln werden einzeln geprüft.
Jede Regel nach der Ablehnung wird ignoriert.
Sie sollten umkehren
-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
Zu
-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