WireGuard permite el acceso a un servicio único en la red

WireGuard permite el acceso a un servicio único en la red

Estoy ejecutando un servidor WireGuard en mi Raspberry Pi usando elhttps://github.com/linuxserver/docker-wireguardimagen. Quiero permitir que mis compañeros hagan dos cosas:

  1. Conéctese a un único NAS a través de SMB
  2. Haga ping al mismo NAS

He escrito las siguientes reglas de iptables para archivar esto ( wg0es la interfaz WireGuard, eth0la que está "hacia" mi red):

# 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

Estos funcionan, por lo que cuando estoy conectado a través de WireGuard puedo hacer ping y montar el NAS a través de SMB, pero no puedo hacer ping a ningún otro servicio en la red ni acceder a la interfaz HTTP del NAS.

Sin embargo, tengo algunas preguntas para entender exactamente lo que he hecho:

  1. Al configurar INPUT/ OUTPUTpolítica en DROP, nada funciona. Mi suposición es que se debe a que wg0la política descarta los paquetes WireGuard UDP recibidos .
  2. Si configuro la política de todos modos y agrego una regla al ALLOWtráfico desde/hacia wg0, el efecto sería que el contenedor no pueda conectarse a nada a través de eth0y solo FORWARDal tráfico desde wg0.
  3. La regla que permite RELATED,ESTABLISHEDel tráfico vía wg0solo debe coincidir con el tráfico que responde a TCP:445 o ICMP:echo-request. No es necesario ser más específico (por ejemplo, puerto/protocolo coincidente), ¿verdad?
  4. La regla ALLOWque establece las respuestas de eco no es necesaria porque la regla menos específica que permite RELATED,ESTABLISHEDel tráfico anterior coincidirá antes, ¿verdad?
  5. Con todo el filtrado en la FORWARDcadena, supongo que no necesito filtrar en la cadena natde tablas POSTROUTING, porque cualquier tráfico que no sea para el NAS en TCP:445 o ICM:echo-request no lo logrará. "hasta aquí" de todos modos. ¿Es esto correcto?

Respuesta1

Para responder brevemente a sus preguntas:

  1. Las cadenas INPUT/ OUTPUTse utilizan para conexiones hacia/desde enchufes locales entodointerfaces ( lo, eth0, wg0, etc.). Por lo general, no desea bloquear todo lo saliente de forma predeterminada porque terminará perdiendo tiempo solucionando problemas que normalmente da por sentado (DNS, DHCP, NTP, procesos varios que utilizan conexiones de bucle invertido, etc.)
  2. Sí. Por lo general, está bien permitir todo RELATED,ESTABLISHEDsin condiciones adicionales (si ya permitió una conexión de una manera, las respuestas simétricas que regresan al otro lado también deberían estar bien)

pienso estodiagrama de flujo de procesamiento de iptablesTambién le ayudará a comprender mejor cómo funciona esto:

Diagrama de flujo de procesamiento de iptables

Así es como escribiría tus reglas:

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

información relacionada