WireGuard는 네트워크의 단일 서비스에 대한 액세스를 허용합니다.

WireGuard는 네트워크의 단일 서비스에 대한 액세스를 허용합니다.

저는 Raspberry Pi에서 다음을 사용하여 WireGuard 서버를 실행하고 있습니다.https://github.com/linuxserver/docker-wireguard영상. 나는 동료들이 두 가지 일을 하도록 허용하고 싶습니다:

  1. SMB를 통해 단일 NAS에 연결
  2. 동일한 NAS에 핑(Ping)

나는 이것을 보관하기 위해 다음과 같은 iptables 규칙을 작성했습니다( 내 네트워크를 "향하는" 인터페이스인 wg0WireGuard 인터페이스입니다 ).eth0

# 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

이러한 작업은 작동하므로 WireGuard를 통해 연결하면 SMB를 통해 NAS를 핑하고 마운트할 수 있지만 네트워크의 다른 서비스를 핑하거나 NAS의 HTTP 인터페이스에 액세스할 수 없습니다.

그러나 내가 한 일을 정확히 이해하기 위해 몇 가지 질문이 있습니다.

  1. INPUT/ OUTPUT정책을 로 설정하면 DROP아무 것도 작동하지 않습니다. 내 가정은 수신된 WireGuard UDP 패킷이 wg0정책에 의해 삭제되었기 때문이라고 가정합니다.
  2. 어쨌든 정책을 설정하고 ALLOW에서/으로 트래픽 에 규칙을 추가하면 컨테이너가 ? 를 통해 어떤 것에도 연결할 wg0수 없고 ?eth0FORWARDwg0
  3. RELATED,ESTABLISHED트래픽을 허용하는 규칙은 wg0TCP:445 또는 ICMP:echo-request에 응답하는 트래픽만 일치해야 합니다. 거기에서 더 구체적으로 설명할 필요는 없습니다(예: 포트/프로토콜 일치). 그렇죠?
  4. 그 위의 트래픽을 허용하는 덜 구체적인 규칙이 그보다 먼저 일치하기 때문에 규칙 ALLOW반향 응답은 필요하지 않습니다 . 그렇죠?RELATED,ESTABLISHED
  5. 체인 의 모든 필터링을 사용하면 TCP:445 또는 ICM:echo-request에서 NAS용이 아닌 모든 트래픽이 필터링되지 않기 때문에 테이블 체인 FORWARD에서 필터링할 필요가 없다고 가정합니다. 어쨌든 "여기까지". 이 올바른지?natPOSTROUTING

답변1

귀하의 질문에 간략하게 답변하려면:

  1. INPUT/ 체인 OUTPUT은 로컬 소켓과의 연결에 사용됩니다.모두인터페이스( lo, eth0, wg0등). 일반적으로 일반적으로 당연하게 여기는 문제(DNS, DHCP, NTP, 루프백 연결을 사용하는 기타 프로세스 등)를 해결하는 데 시간을 소비하게 되므로 기본적으로 모든 아웃바운드를 차단하고 싶지는 않습니다.
  2. 예. 일반적으로 추가 조건 없이 모두 허용하는 것이 좋습니다 RELATED,ESTABLISHED. (이미 한 방향을 통한 연결을 허용한 경우 반대 방향으로 돌아가는 대칭 응답도 괜찮습니다.)

나는 이것을 생각 해요iptables 처리 흐름도또한 이것이 어떻게 작동하는지 더 잘 이해하는 데 도움이 될 것입니다.

iptables 처리 흐름도

이것이 제가 귀하의 규칙을 작성하는 방법입니다:

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

관련 정보