WireGuard permite acesso a um único serviço na rede

WireGuard permite acesso a um único serviço na rede

Estou executando um servidor WireGuard no meu Raspberry Pi usando ohttps://github.com/linuxserver/docker-wireguardimagem. Quero permitir que os colegas façam duas coisas:

  1. Conecte-se a um único NAS via SMB
  2. Faça ping no mesmo NAS

Eu escrevi as seguintes regras de iptables para arquivar isso ( wg0é a interface WireGuard, eth0aquela "em direção" à minha rede):

# 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

Eles funcionam, portanto, quando conectado via WireGuard, posso executar ping e montar o NAS via SMB, mas não consigo executar ping em nenhum outro serviço na rede ou acessar a interface HTTP do NAS.

No entanto, tenho algumas perguntas para entender exatamente o que fiz:

  1. Ao definir INPUT/ OUTPUTpolítica como DROP, nada funciona. Minha suposição é que é porque os pacotes UDP do WireGuard recebidos wg0são descartados pela política.
  2. Se eu definir a política de qualquer maneira e adicionar uma regra ao ALLOWtráfego de/para wg0, o efeito será que o contêiner não poderá se conectar a nada via eth0e somente FORWARDao tráfego de wg0?
  3. A regra que permite RELATED,ESTABLISHEDo tráfego wg0deve corresponder apenas ao tráfego que responde a TCP:445 ou ICMP:echo-request. Não há necessidade de ser mais específico (por exemplo, porta/protocolo correspondente), certo?
  4. A regra ALLOWde respostas de eco não é necessária porque a regra menos específica que permite RELATED,ESTABLISHEDo tráfego acima dela corresponderá antes dela, certo?
  5. Com toda a filtragem na FORWARDcadeia, minha suposição é que não preciso filtrar na cadeia natde tabelas POSTROUTING, porque qualquer tráfego que não seja para o NAS em TCP:445 ou ICM:echo-request não será executado. "até aqui" de qualquer maneira. Isso está correto?

Responder1

Para responder brevemente às suas perguntas:

  1. Sim
  2. As cadeias INPUT/ OUTPUTsão usadas para conexões de/para soquetes locais emtodosinterfaces ( lo, eth0, wg0, etc). Normalmente, você não deseja bloquear tudo o que sai por padrão, porque acabará gastando tempo solucionando problemas que normalmente considera garantidos (DNS, DHCP, NTP, processos diversos usando conexões de loopback, etc.)
  3. Sim. Normalmente, não há problema em permitir tudo RELATED,ESTABLISHEDsem quaisquer condições adicionais (se você já permitiu uma conexão de uma maneira, respostas simétricas voltando para o outro lado também devem servir)
  4. Sim
  5. Sim

eu acho istofluxograma de processamento iptablestambém ajudará você a entender melhor como isso funciona:

Fluxograma de processamento do iptables

É assim que eu escreveria suas regras:

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

informação relacionada