NAT 테이블과 함께 UFW를 사용하는 더 나은 VPN Killswitch가 있습니까?

NAT 테이블과 함께 UFW를 사용하는 더 나은 VPN Killswitch가 있습니까?

목적

Raspberry Pi에 다음 인터페이스가 제공됩니다.

  • eth0 (192.168.0.0/24) - 개인 네트워크(예: NAT)
  • wlan0 (192.168.10.0/24) - 인터넷 접속이 가능한 공용 네트워크(예: LAN)
  • tun0 (VPN) - VPN 연결

방화벽 설정다음 목표를 달성하려면:

  • 모든 인바운드 트래픽 거부: wlan0, tun0(들어오는 연결 차단)
  • 모든 아웃바운드 트래픽을 eth0다음으로 라우팅합니다 tun0("수평" 연결 차단, 즉 LAN 액세스 없음).
    • 꺼지면 사용이 허용되지 않습니다(예 tun0: VPN Killswitch)eth0wlan0

주류 사례

UFW에서 많은 "VPN Killswitch" 예제를 보았으며 모두 공통 구성을 공유합니다.

# Defaults
ufw default deny outgoing
ufw default deny incoming

# Allow local over ethernet (without VPN)
sudo ufw allow out to 192.168.0.0/24 # Allow out to LAN
sudo ufw allow in to 192.168.0.0/24 # Allow in to LAN

# Allow outgoing over ethernet to VPN
sudo ufw allow out to [VPN] port 1194 proto udp

# Allow outgoing over tun0
sudo ufw allow out on tun0 # Allow out over VPN

원천:

내 NAT 예(대체)

물론 내 애플리케이션에는 라우터, 방화벽, DNS 및 DHCP 서버, VPN 클라이언트 역할을 하는 중개 장치(Raspberry Pi)가 있으므로 설정이 약간 다릅니다. 그러나 NAT 테이블()은 /etc/ufw/before.rules이러한 명령문을 처리 하고 ufw allow out/in to 192.168.0.0/24(두 번째 대상)의 거의 eth0모든 아웃바운드 트래픽을 그대로 라우팅하는 것으로 보입니다.tun0

# NAT table to "forward" private network to VPN tunnel
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.0.0/24 -o tun0 -j MASQUERADE
COMMIT

그러면 eth0개인 네트워크( )에서 들어오는 모든 항목이 VPN 터널( tun0)로 "전달"되어야 합니다. 그렇죠? 아니면 FORWARD여기에도 용어가 필요합니까?

그 후에는 다음과 같은 다른 항목을 구성해야 하는지 잘 모르겠습니다.

# Set defaults (also see /etc/default/ufw)
sudo ufw default deny incoming
sudo ufw default deny outgoing

# Allow incoming requests to DNS/DHCP services (UDP) on eth0 interface only (i.e. Private Network -> Pi:43,67/udp)
sudo ufw allow in on eth0 from any to any port 53,67 proto udp

# Allow incoming requests to SSH service (TCP) on eth0 interface only (i.e. Private Network -> Pi:22/tcp)
sudo ufw allow in on eth0 from any to any port 22 proto tcp

# Allow outbound on wlan0 interface for VPN traffic only (i.e. Pi -> LAN:1194)
sudo ufw allow out on wlan0 from any to any port 1194 proto udp

# Allow all outbound traffic on eth0 (i.e. Pi -> Private Network)
sudo ufw allow out on eth0

# Allow all outbound traffic on VPN tunnel only (i.e. Pi -> VPN)
sudo ufw allow out on tun0

tracerouteNAT 테이블 ( 등) 만 사용한 테스트에서 pingVPN 연결을 끊을 때 Raspberry Pi에서 아웃바운드 인터넷 연결이 멈추는 것을 볼 수 있습니다. 그러나 여전히 확인하려는 것은 이것이 가능한 모든 유출 시나리오(예: DNS 등)를 포괄하는지 여부입니다.

참고: dnsmasq또한 DHCP 서버가 개인 네트워크의 클라이언트에 게시하는 DNS 서버로 Raspberry Pi를 사용하고 있습니다. 가능한 경우 DNS 쿼리만 전달 dnsmasq하도록 구성하거나 공용 DNS(예: 8.8.8.8, 8.8.4.4)로 전달하도록 선택해야 하는지 궁금합니다 . tun0또한 현재로서는 이 설정이 여전히 아웃바운드 연결을 차단하지만, 실행하면 sudo ufw allow out on wlan0연결이 복원됩니다(VPN Killswitch는 계속 작동합니다). 그래서 나는 꽤 가까워진 것 같고, 아마도 몇 가지 규칙이 더 필요할 것 같습니다.

시간을 내어 이러한 세부 사항을 살펴보고 피드백을 제공해 주신 모든 분들께 진심으로 감사드립니다!

답변1

/var/log/ufw.log따라서 다른 사람이 달리 생각하지 않는 한 누락된 부분을 찾았을 수도 있다고 생각하므로 이 답변을 남길 것입니다(감사합니다 ).

# Allow DNS queries
# [UFW BLOCK] IN= OUT=wlan0 SRC=192.168.10.x DST=192.168.10.1 LEN=66 TOS=0x00 PREC=0x00 TTL=64 ID=50892 DF PROTO=UDP SPT=22617 DPT=53 LEN=46 
sudo ufw allow out on wlan0 from any to any port 53 proto udp

따라서 현재 규칙 세트는 다음과 같습니다(기본 발신에 유의하세요).

Status: active
Logging: on (low)
Default: deny (incoming), deny (outgoing)
New profiles: skip

To                         Action      From
--                         ------      ----
53,67/udp on eth0          ALLOW IN    Anywhere
22/tcp on eth0             ALLOW IN    Anywhere

1194/udp                   ALLOW OUT   Anywhere on wlan0
Anywhere                   ALLOW OUT   Anywhere on eth0
Anywhere                   ALLOW OUT   Anywhere on tun0
53/udp                     ALLOW OUT   Anywhere on wlan0

주문하다:

# Allow incoming requests to DNS/DHCP services (UDP) on eth0 interface only (i.e. Private Network -> Pi:43,67/udp)
sudo ufw allow in on eth0 from any to any port 53,67 proto udp

# Allow incoming requests to SSH service (TCP) on eth0 interface only (i.e. Private Network -> Pi:22/tcp)
sudo ufw allow in on eth0 from any to any port 22 proto tcp

# Allow outbound on wlan0 interface for DNS and VPN traffic only (i.e. Pi -> LAN:1194)
sudo ufw allow out on wlan0 from any to any port 53,1194 proto udp

# Allow all outbound traffic on eth0 (i.e. Pi -> Private Network)
sudo ufw allow out on eth0

# Allow all outbound traffic on VPN tunnel only (i.e. Pi -> VPN)
sudo ufw allow out on tun0

# Set defaults (also see /etc/default/ufw)
sudo ufw default deny incoming
sudo ufw default deny outgoing

이는 또한 "라우팅"을 /etc/ufw/before.rules처리하기 위해 원래 게시물에서 언급한 NAT 테이블 항목과 결합 됩니다 eth0 -> tun0.

결국 내 항목에는 /etc/dnsmasq.conf다음과 같은 단일 server항목이 포함되었습니다.

# Force VPN by selecting public DNS
server=8.8.8.8

# Do not read from /etc/resolv.conf and friends for system DNS
no-resolv

# Do not poll /etc/resolv.conf and friends for system DNS
no-poll

VPN을 통해 8.8.8.8로 승인 요청이 전송되고 구성(암시적 DHCP)되면 traceroute클라이언트는 기본적으로 Pi를 DNS로 사용하고 Pi는 이 구성을 사용합니다.

이것은 패키지입니다!

관련 정보