Ubuntu-Rechner mit Haproxy und 2 Netzwerkkarten, 1 mit WAN verbunden (genannt wan0) und eine mit LAN verbunden (genannt lan0). Alle Ketten sind auf DROP-Verkehr eingestellt.
# Masquerade traffic from LAN to WAN
-A POSTROUTING -o wan0 -s 192.168.x.x/24 -j MASQUERADE
# Allow traffic from LAN to WAN
iptables -I FORWARD -i lan0 -o wan0 -j ACCEPT
# Allow HTTP traffic in/out both interfaces
-A INPUT -p tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp --sport 80 -j ACCEPT
*** Is below rule needed? ***
# -A FORWARD -i wan0 -o lan0 -p tcp –dport 80 -j ACCEPT
Ich möchte HTTP-Verkehr (Port 80) vom WAN ins LAN zulassen, wo Haproxy ihn an Backend-Server weiterleitet. In der Dokumentation, die ich gelesen habe, heißt es:
„INPUT, FORWARD und OUTPUT sind getrennt. Ein Paket trifft nur eine der drei Ketten.“
Übersehe ich irgendwelche iptable-Regeln, die den HTTP-Verkehr (Port 80) zwischen Schnittstellen weiterleiten würden?
Antwort1
Wie Sie sagten, ist die Standardkettenrichtlinie auf eingestellt DROP
. Sie müssen also ACCEPT
für jeden Datenverkehrstyp, den Sie zulassen möchten, eine explizite Regel haben.
Die folgende Regel erlaubt Datenverkehr, der von lan0
der Schnittstelle kommt und die Schnittstelle verlässt und durch Ihre Box läuft wan0
.
iptables -I FORWARD -i lan0 -o wan0 -j ACCEPT
Darüber hinaus empfiehlt es sich, andere Arten von Datenverkehr wie RELATED und ESTABLISHED mithilfe einer Regel wie der folgenden zuzulassen:
iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
Dies ist erforderlich, damit der Antwortverkehr durchgelassen werden kann. Dasselbe gilt für - INPUT
und OUTPUT
-Ketten.
Es hängt wirklich von Ihren Anforderungen ab und davon, was Sie zulassen und verweigern möchten.
Was den Satz betrifft:
„INPUT, FORWARD und OUTPUT sind getrennt. Ein Paket trifft nur eine der drei Ketten.“
Ja, das stimmt. Ein Paket trifft ein:
INPUT
Kette, wenn sie für die lokale Maschine bestimmt ist.OUTPUT
Kette, wenn sie vom lokalen Computer stammt.FORWARD
Andernfalls wird die Kette (von einer anderen Maschine empfangen und muss an eine andere Maschine weitergeleitet werden) unterbrochen.