목적
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)eth0
wlan0
- 꺼지면 사용이 허용되지 않습니다(예
주류 사례
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
원천:
- https://forums.whirlpool.net.au/archive/2561726
- https://www.reddit.com/r/VPN/comments/4ik46m/vpn_killswitch_setup_using_ufw/
- https://www.youtube.com/watch?v=x9fb2UAWkBE
- https://github.com/andreisid/bash/blob/master/killswitch.sh
내 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
traceroute
NAT 테이블 ( 등) 만 사용한 테스트에서 ping
VPN 연결을 끊을 때 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는 이 구성을 사용합니다.
이것은 패키지입니다!