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:
- Conéctese a un único NAS a través de SMB
- Haga ping al mismo NAS
He escrito las siguientes reglas de iptables para archivar esto ( wg0
es la interfaz WireGuard, eth0
la 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:
- Al configurar
INPUT
/OUTPUT
política enDROP
, nada funciona. Mi suposición es que se debe a quewg0
la política descarta los paquetes WireGuard UDP recibidos . - Si configuro la política de todos modos y agrego una regla al
ALLOW
tráfico desde/haciawg0
, el efecto sería que el contenedor no pueda conectarse a nada a través deeth0
y soloFORWARD
al tráfico desdewg0
. - La regla que permite
RELATED,ESTABLISHED
el tráfico víawg0
solo 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? - La regla
ALLOW
que establece las respuestas de eco no es necesaria porque la regla menos específica que permiteRELATED,ESTABLISHED
el tráfico anterior coincidirá antes, ¿verdad? - Con todo el filtrado en la
FORWARD
cadena, supongo que no necesito filtrar en la cadenanat
de tablasPOSTROUTING
, 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:
- Sí
- Las cadenas
INPUT
/OUTPUT
se 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.) - Sí. Por lo general, está bien permitir todo
RELATED,ESTABLISHED
sin 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) - Sí
- Sí
pienso estodiagrama de flujo de procesamiento de iptablesTambién le ayudará a comprender mejor cómo funciona esto:
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