
Ich bin ziemlich verwirrt und verstehe es überhaupt nicht iptables
.
Ich habe einen nginx-Server, der zuhört localhost:80
, und ich möchte mit der IP-Adresse meiner Netzwerkkarte darauf zugreifen 192.168.29.167:80
. Ich folgtedigitaloceanzum Einrichten der Regeln.
Mein:
Typ | Schnittstelle | Adresse |
---|---|---|
local |
lo |
127.0.0.1 |
NIC lan |
enp7s0 |
192.168.29.167 |
Ich tat,
iptables -A FORWARD -i lo -o enp7s0 -p tcp --syn --dport 80 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -i lo -o enp7s0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i enp7s0 -o lo -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 80 -d 127.0.0.1 -j SNAT --to-desitnation 127.0.0.1
Das Einrichten der PREROUTING
und POSTROUTING
Regeln FORWARD
hat nichts bewirkt. Ich kann nicht localhost:80
über zugreifen enp7s0
.
(Anmerkung: Ich habe sudo sysctl -w net.ipv4.ip_forward=1
)
Antwort1
- Sie haben einen Fehler in den
nat
Regeln: Ihre Schnittstellennamen scheinen falsch zu sein. Verwenden Sie besser dieDNAT
auf der Zieladresse basierenden, nicht den Namen der Eingabeschnittstelle. Sie benötigen also nur eine einzige Regel, um das gewünschte Ergebnis zu erzielen:
iptables -t nat -A PREROUTING --dst 192.168.29.167 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:80
- Diese Pakete werden nicht weitergeleitet (transitiert), sondern eingegeben. Sie sollten diesen Datenverkehr in der
filter/INPUT
Kette zulassen, nicht infilter/FORWARD
. Beachten Sie, dassDNAT
sich die Eingabeschnittstelle nach der Aktion nicht ändert (Sie sollten alsoenp7s0
die Schnittstelle angeben, nichtlo
). Sie können jedoch jedeDNAT
Verbindung mit einer einzigen Regel zulassen.
iptables -t filter -A INPUT -m conntrack --ctstate DNAT -j ACCEPT
- Führen Sie den aus,
sysctl -w net.ipv4.conf.enp7s0.route_localnet=1
um den Empfang von Paketen von außerhalb zu ermöglichen, die an adressiert sind127.0.0.1
. - Verwenden Sie besser
iptables-save -c
Befehle, um den vollständigen Regelsatz mit Zählern aufzulisten. Sie solltennat/PREROUTING
zumindest eine Erhöhung der Regelzähler sehen. Verwenden Sie außerdem die ,iptables-apply
um neue Regeln anzuwenden. Lesen Sie die Dokumentation zu diesen Dienstprogrammen. - Verwenden Sie dies
tcpdump -ni enp7s0 'tcp port 80'
, um den Datenverkehr von außen zu beheben. - Um den lokal generierten Datenverkehr umzuleiten, sollten Sie diese Regeln verwenden
iptables -t nat -A OUTPUT -p tcp --dport 80 --dst 192.168.29.167 -j DNAT --to 127.0.0.1
Andernfalls können Sie vom Server selbst aus keine Verbindung zu Ihrem Nginx über die Adresse 192.168.29.167 herstellen.