IPTables DNAT-Regel für lokalen Webserver funktioniert nicht mit localhost?

IPTables DNAT-Regel für lokalen Webserver funktioniert nicht mit localhost?

Ich habe eine Linux-Box, die als Wireless Access Point fungiert. Drahtlose Clients stellen eine Verbindung her und surfen dann im Internet. Ich lasse nur Port 80 zu.

Es gibt bestimmte Sites, die ich blockieren möchte, aber nicht durch Löschen des Pakets, sondern durch Umleiten auf eine blockierte.html-Seite, die von einem lokalen Webserver bereitgestellt wird.

Ich habe zwei Netzwerkkarten. Die auf der Internetseite ist an 10.0.2.15 gebunden. Wenn ich eine DNAT-Regel anwende, um den Datenverkehr über die Internet-Netzwerkkarte auf meinen Webserver umzuleiten, wird die Seite zurückgegeben. Wenn ich auf 127.0.0.1 umleite, wird die Seite nicht zurückgegeben.

Warum das?

Hier ist meine IPTables-Konfiguration:

# iptables -S
-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT DROP
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -p tcp -m tcp --sport 80 -j ACCEPT 
-A OUTPUT -o lo -j ACCEPT 
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A OUTPUT -p tcp -m tcp --sport 80 -j ACCEPT 
# iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-N block-chain
-A PREROUTING -j block-chain 
-A POSTROUTING -o eth1 -j MASQUERADE 
# THIS WILL NOT RETURN THE PAGE TO THE CLIENT
-A block-chain -d 206.190.36.45/32 -p tcp -j DNAT --to-destination 127.0.0.1:80 
# THIS WILL
-A block-chain -d 206.190.36.45/32 -p tcp -j DNAT --to-destination 10.0.2.15:80 
-A block-chain -j RETURN 

Antwort1

Für localhost müssen Sie REDIRECT anstelle von DNAT verwenden. In Ihrem Beispiel:

-A block-chain -d 206.190.36.45/32 -p tcp -j REDIRECT --to-ports 80

Antwort2

-j DNAT --to-destination 127.0.0.1:80leitet Clients um, damit diese für eine Webseite ihre eigene Loopback-Adresse aufrufen.

Bleiben bei-A block-chain -d 206.190.36.45/32 -p tcp -j DNAT --to-destination 10.0.2.15:80

verwandte Informationen