WireGuard ermöglicht den Zugriff auf einzelne Dienste im Netzwerk

WireGuard ermöglicht den Zugriff auf einzelne Dienste im Netzwerk

Ich betreibe einen WireGuard-Server auf meinem Raspberry Pi mit demhttps://github.com/linuxserver/docker-wireguardBild. Ich möchte Peers zwei Dinge ermöglichen:

  1. Verbindung zu einem einzelnen NAS über SMB herstellen
  2. Pingen Sie dasselbe NAS an

Um dies zu archivieren, habe ich die folgenden iptables-Regeln geschrieben ( wg0ist die WireGuard-Schnittstelle, eth0die „zu“ meinem Netzwerk führt):

# Reset (flush) rules
iptables -t nat -F
iptables -F

# Allow WireGuard traffic
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT

# Deny any forward traffic by default
iptables --policy FORWARD DROP

# Allow SAMBA traffic to NAS
NAS="192.168.178.23/32"
iptables -A FORWARD -i wg0 -p tcp --dport 445 -d "$NAS" -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -o wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow ICMP echo request
iptables -A FORWARD -i wg0 -p icmp --icmp-type 8 -d "$NAS" -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -o wg0 -p icmp --icmp-type 0 -m state --state RELATED,ESTABLISHED -j ACCEPT

# NAT tunnel IP to internal IP
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Diese funktionieren, sodass ich bei einer Verbindung über WireGuard das NAS über SMB anpingen und mounten kann, aber keinen anderen Dienst im Netzwerk anpingen oder auf die HTTP-Schnittstelle des NAS zugreifen kann.

Ich habe jedoch ein paar Fragen, um genau zu verstehen, was ich getan habe:

  1. Wenn ich INPUT/ OUTPUTpolicy auf setze DROP, funktioniert nichts. Ich gehe davon aus, dass es daran liegt, dass die auf empfangenen WireGuard UDP-Pakete wg0von der Richtlinie verworfen werden?
  2. Wenn ich die Richtlinie trotzdem festlege und eine Regel für ALLOWden Datenverkehr von/nach hinzufüge wg0, hätte dies zur Folge, dass der Container keine Verbindung über herstellen kann eth0und nur FORWARDder Datenverkehr von empfangen werden kann wg0?
  3. Die Regel, die RELATED,ESTABLISHEDDatenverkehr zulässt wg0, sollte immer nur auf Datenverkehr zutreffen, der als Antwort auf TCP:445 oder ICMP:Echo-Anforderung erfolgt. Es ist nicht nötig, hier spezifischer zu sein (z. B. übereinstimmender Port/Protokoll), oder?
  4. Die Regel ALLOWfür Echo-Antworten ist nicht erforderlich, da die weniger spezifische Regel, die RELATED,ESTABLISHEDdarüber liegenden Datenverkehr zulässt, davor zutrifft, oder?
  5. Angesichts der Filterung der FORWARDKette gehe ich davon aus, dass ich die natTabellenkette nicht filtern muss POSTROUTING, da jeglicher Datenverkehr, der nicht für das NAS bestimmt ist, über TCP:445 oder ICM:echo-request ohnehin nicht „so weit“ kommt. Ist das richtig?

Antwort1

Um deine Fragen kurz zu beantworten:

  1. Ja
  2. Die INPUT/ OUTPUT-Ketten werden für Verbindungen zu/von lokalen Sockets verwendet aufalleSchnittstellen ( lo, eth0, wg0, usw.). Normalerweise möchten Sie nicht standardmäßig alles abgehende blockieren, da Sie am Ende Zeit mit der Fehlerbehebung bei Dingen verbringen, die Sie normalerweise für selbstverständlich halten (DNS, DHCP, NTP, verschiedene Prozesse, die Loopback-Verbindungen verwenden, usw.).
  3. RELATED,ESTABLISHEDJa. Normalerweise ist es in Ordnung, einfach alles ohne zusätzliche Bedingungen zuzulassen (wenn Sie bereits eine Verbindung über eine Richtung zugelassen haben, sollten symmetrische Antworten in die andere Richtung auch in Ordnung sein).
  4. Ja
  5. Ja

ich denke dasFlussdiagramm zur iptables-Verarbeitungwird Ihnen auch helfen, besser zu verstehen, wie das funktioniert:

iptables-Verarbeitungsflussdiagramm

So würde ich Ihre Regeln schreiben:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# INPUT chain of filter table:

# drop known bad packets
iptables -A INPUT -m state --state INVALID -j DROP
# accept responses to established connections
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# accept ICMP packets
iptables -A INPUT -p icmp -J ACCEPT
# accept loopback connections
iptables -A INPUT -i lo -J ACCEPT
# accept connections to WireGuard listen port
iptables -A INPUT -p udp --dport 51820 -J ACCEPT

# FORWARD chain of filter table:

# drop known bad packets
iptables -A FORWARD -m state --state INVALID -j DROP
# forward responses to established connections
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# forward ICMP packets from WireGuard network to NAS
iptables -A FORWARD -i wg0 -d 192.168.178.23 -p icmp -J ACCEPT
# forward SMB connections from WireGuard network to NAS
iptables -A FORWARD -i wg0 -d 192.168.178.23 -p tcp --dport 445 -J ACCEPT

# POSTROUTING chain of nat table:

# masquerade all packets forwarded to LAN
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

verwandte Informationen