Làm cách nào tôi có thể đảm bảo lưu lượng truyền sử dụng VPN?


31

Tôi muốn đảm bảo rằng việc truyền chỉ gửi / nhận lưu lượng khi máy chủ mà nó chạy được kết nối với VPN.

Tôi thấy câu hỏi này tương tự nhưng tôi không muốn buộc tất cả lưu lượng truy cập thông qua VPN và tôi không thể tìm thấy một hướng dẫn tốt về cách sử dụng Firestarter từ dòng lệnh.

Thay vào đó tôi đã nghĩ đến việc sử dụng ufw, nhưng tôi không có chút kinh nghiệm nào với tường lửa và tôi hy vọng cộng đồng có thể giúp tôi.

Một ý tưởng tôi đã có là buộc truyền dẫn sử dụng một cổng cụ thể, ví dụ 33442, và sau đó chỉ cho phép lưu lượng truy cập đến và từ cổng đó từ địa chỉ IP của máy chủ VPN. Tôi đã xem hướng dẫn máy chủ Ubuntu và tôi nghĩ có thể làm một cái gì đó như thế này:

sudo ufw enable
sudo ufw deny port tcp from localhost to any port 33442
sudo ufa allow port tcp from localhost to VPNIP port 33442
sudo ufw deny port udp from localhost to any port 33442
sudo ufa allow port udp from localhost to VPNIP port 33442

Liệu logic này giữ muối của nó? Bạn sẽ làm điều này như thế nào? Tôi sẽ sử dụng gì cho VPNIP, IP công cộng của máy chủ VPN hoặc tôi nên chỉ định phạm vi mạng con cục bộ mà VPN kết nối với tôi?

Cảm ơn bạn đã giúp đỡ!

Câu trả lời:


25

Tạo vpnroutenhóm:

sudo groupadd vpnroute

Thêm iptablesquy tắc từ chối mọi kết nối mạng gửi đi được thực hiện bởi các thành viên của vpnroutenhóm không qua tun0giao diện:

sudo iptables -A OUTPUT -m owner --gid-owner vpnroute \! -o tun0 -j REJECT

Bắt đầu quá trình truyền tải với tư cách là thành viên của vpnroutenhóm:

sudo -g vpnroute transmission-gtk &

1
Điều này thật đúng với gì mà tôi đã tìm kiếm. Cảm ơn!
Taeram

3
Cảnh báo: điều này không hoạt động với Deluge, AFAICT vì Deluge sinh ra các quy trình sup. Tôi đã kiểm tra cẩn thận và thiết lập của tôi là đúng - sudo -g vpnroute ping google.com sẽ hiển thị 'Điểm đến không thể truy cập' cho đến khi tôi bật VPN trên tun0. Nhưng giao diện người dùng Deluge luôn có thể tải xuống torrent, cho dù VPN có được kết nối hay không. Với pgrep -G vpnroute tôi đã tìm thấy nó bởi vì chỉ có quá trình ban đầu / usr / bin / python được chạy theo vpnroute GID, các quy trình deluge-gtk được sinh ra dường như không được.
happyskeptic

10
Ai đó có thể giải thích chính xác những gì từng bước này không?
ohnoplus

2
Truyền tải có khả năng nghe một địa chỉ cụ thể - nhưng không có giao diện cụ thể. Khi bắt đầu từ dòng lệnh, --bind-address-ipv4 $IP_ADDRsẽ cho Truyền biết địa chỉ nào cần liên kết. Điều này sau đó yêu cầu các quy tắc định tuyến đúng để đảm bảo lưu lượng truy cập đến đúng nơi. Có một cái nhìn vào câu hỏi này cho cách tôi quản lý để làm điều đó.
seanlano

3
@ohnoplus Tạo một nhóm gọi là "vpnroute"; thêm quy tắc tường lửa từ chối mọi kết nối mạng gửi đi được thực hiện bởi các thành viên của nhóm không đi qua VPN (được định nghĩa ở đây là giao diện "tun0" nhưng một số hệ thống có thể khác); bắt đầu quá trình truyền chạy với tư cách là thành viên của nhóm "vpnroute".
TommyPeanuts

4

Điều này hoạt động cho truyền không đầu, tôi đang hạn chế lưu lượng dựa trên người dùng đang chạy dịch vụ truyền, 10.0.0.0/8là mạng nội bộ của bạn, bạn nên thay đổi nó để phù hợp với mạng của bạn, tun0là giao diện OpenVPN, eth0là kết nối mạng LAN của bạn.

Thêm sudovào các lệnh, nếu bạn không root:

iptables -F (Chúng tôi đã sử dụng công tắc -F để xóa tất cả các quy tắc hiện có để chúng tôi bắt đầu với trạng thái sạch để thêm quy tắc mới.)

iptables -L (liệt kê thiết lập hiện tại)

NET=10.0.0.0/8
GROUP=debian-transmission
IFACE_INTERNAL=eth0
IFACE_VPN=tun0
ALLOW_PORT_FROM_LOCAL=9091
iptables -A OUTPUT -d $NET -p tcp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -d $NET -p udp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o $IFACE_VPN -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o lo -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -j REJECT

làm cho các iptables liên tục sau khi khởi động lại

apt-get install iptables-persistent
service iptables-persistent start

Cái này mang lại cho tôi những thứ sau: $ sudo iptables -A OUTPUT -d 10.0.0.0/8 -p tcp --sport 9091 -m chủ sở hữu - : Giá trị xấu cho tùy chọn "--gid-own": "debian-Transmission" Tôi có thiếu thứ gì không?
ohnoplus

Có, @ohnoplus :) Trước tiên, bạn phải tạo nhóm (hoặc chủ sở hữu) truyền tải debian. Và đảm bảo bạn đang chạy ứng dụng như nhóm hoặc người dùng này: nhóm.
Joachim

Đây chính xác là những gì tôi cần để kích hoạt giao diện web Transmission Remote, cảm ơn!
Zane Hooper

4

Dưới đây là toàn bộ 'CÁCH' cho NOOBS (sử dụng debian) để đảm bảo nhóm người dùng truyền tải debian (tức là truyền) chỉ định tuyến dữ liệu qua vpn

KHÔNG sử dụng 'Cách làm' dài hơn cho vpn dựa trên các tập lệnh hệ thống phức tạp ...! iptables là PHƯƠNG PHÁP TỐT NHẤT (và hoàn hảo nhất) !!! - SỬ DỤNG MỘT QUY TẮC IPTABLE dựa trên người dùng và nhóm truyền để kiểm soát vpn (không giống như nhiều phương pháp 'hack' phức tạp hơn sử dụng tập lệnh systemd, tập lệnh lên và xuống, v.v.) và thật đơn giản!

Bước 1 - Thiết lập: (Giả sử truyền được cài đặt và do đó người dùng truyền debian tồn tại!)

sudo apt-get install iptables
sudo apt-get install iptables-persistent

Bước 2 - Tạo tệp quy tắc truyền ip

sudo nano transmission-ip-rules

và thêm văn bản trong khối mã bên dưới bắt đầu từ #!/bin/bash

QUAN TRỌNG

  • Nếu mạng cục bộ của bạn không có dạng 192.168.1.x Thay đổi biến NET để tương ứng với định dạng địa chỉ mạng cục bộ của riêng bạn !!.
  • Ngoài ra, hãy lưu ý đến vấn đề mà 192.168.1.0/25 thực sự mang lại cho phạm vi 192.168.1.0-255!
  • Đôi khi các giao diện của bạn eth0, tun0 (là vpn), v.v. có thể khác - kiểm tra với 'ifconfig' và thay đổi nếu cần.
#!/bin/bash
# Set our rules so the debian-transmission user group can only route through the vpn
NET=192.168.1.0/25
GROUP=debian-transmission
IFACE_INTERNAL=eth0
IFACE_VPN=tun0
ALLOW_PORT_FROM_LOCAL=9091
iptables -A OUTPUT -d $NET -p tcp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -d $NET -p udp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o $IFACE_VPN -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o lo -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -j REJECT
# not needed - but added these to properly track data to these interfaces....when using iptables -L -v
iptables -A INPUT -i $IFACE_VPN -j ACCEPT
iptables -A INPUT -i $IFACE_INTERNAL -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
# track any forward (NAT) data for completeness - don't care about interfaces
iptables -A FORWARD

Lưu tệp và sau đó chạy

sudo iptables -F 
sudo chmod +x transmission-ip-rules
sudo ./transmission-ip-rules

sau đó đảm bảo các quy tắc này tồn tại giữa các lần khởi động lại với:

sudo dpkg-reconfigure iptables-persistent

và nhấn có vào cả hai dấu nhắc. LÀM XONG!

Điều tuyệt vời về kịch bản này là nó sẽ theo dõi tất cả dữ liệu thông qua thiết bị! Khi bạn phát hành

sudo iptables -L -v

nó sẽ hiển thị bao nhiêu dữ liệu sẽ được chuyển đến giao diện nào và INPUT hoặc OUTPUT bên nào để bạn có thể yên tâm rằng tập lệnh vpn đang hoạt động đúng. Ví dụ;

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                         
1749K  661M ACCEPT     all  --  tun0   any     anywhere             anywhere                                                                                            
3416K 3077M ACCEPT     all  --  eth0   any     anywhere             anywhere                                                                                            
 362K  826M ACCEPT     all  --  lo     any     anywhere             anywhere                                                                                            

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                         
    0     0            all  --  any    any     anywhere             anywhere                                                                                            

Chain OUTPUT (policy ACCEPT 2863K packets, 2884M bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                         
 1260  778K ACCEPT     tcp  --  any    eth0    anywhere             192.168.1.0/                                                                                        25       tcp spt:9091 owner GID match debian-transmission
    0     0 ACCEPT     udp  --  any    eth0    anywhere             192.168.1.0/                                                                                        25       udp spt:9091 owner GID match debian-transmission
1973K 1832M ACCEPT     all  --  any    tun0    anywhere             anywhere                                                                                                     owner GID match debian-transmission
 8880  572K ACCEPT     all  --  any    lo      anywhere             anywhere                                                                                                     owner GID match debian-transmission
13132  939K REJECT     all  --  any    any     anywhere             anywhere                                                                                                     owner GID match debian-transmission reject-with icmp-port-unreachable

Kịch bản này đã được kiểm tra toàn diện về kết nối, ngắt kết nối, khởi động lại từ vpn. Nó hoạt động rất tốt. Truyền chỉ có thể sử dụng VPN. Ưu điểm lớn của kịch bản này so với các kịch bản khác là tôi đã chắc chắn như bạn có thể thấy (thông quaiptables -L -v) rằng các số liệu dữ liệu của bạn với những gì được kéo qua truyền (bằng cách thêm các quy tắc INPUT (tất cả) và Chuyển tiếp (tất cả) cho mỗi giao diện eth0, vpn (tun0)). Vì vậy, bạn biết chính xác những gì đang xảy ra !!! Tổng số dữ liệu sẽ không chính xác với truyền - Thật không may, tôi không thể phân biệt được phía INPUT cho người dùng truyền debian, và sẽ có cả chi phí phụ và có lẽ các quy trình khác sử dụng cùng VPN, nhưng bạn sẽ thấy dữ liệu gần như là về phía INPUT và khoảng một nửa trên OUTPUT cho vpn xác nhận hoạt động của nó. Một điều khác cần lưu ý - phải mất một thời gian để ngắt kết nối vpn (tất cả các điểm dừng giao thông với truyền) và kết nối lại để truyền để 'đi' trên vpn mới, vì vậy đừng lo lắng nếu phải mất khoảng 5 phút để bắt đầu lại. .

MIPO - google 'MAN iptables' và xem bài viết này về giám sát băng thông nếu bạn muốn biết từng dòng cách tập lệnh này hoạt động ...


Phạm vi của 192.168.1.0/25 là 192.168.1.0-127.
Zachary822

3

Tốt nhất bạn nên sử dụng máy khách torrent có tính năng để liên kết với một giao diện cụ thể (giao diện VPN).

Trong số các khách hàng torrent, Deluge thực hiện điều này. Vì vậy, bạn có thể cài đặt Deluge và định cấu hình giao diện trong Tùy chọn và bạn đã được đặt!


Cảm ơn câu trả lời của bạn. Hiện tại tôi thực sự khá ấn tượng khi sử dụng Transmission, bạn có biết liệu có thể liên kết với giao diện hoặc dải IP cụ thể không (vì vậy nó chỉ sử dụng VPN) với Transmission? Cảm ơn!
Evan

2
@ user4124 Bạn có biết cách liên kết Deluged với một giao diện mạng cụ thể thông qua dòng lệnh hoặc webui không? Vì dường như không ai biết làm điều này với Transmission, tôi đã thử Deluge nhưng cho đến nay vẫn chưa có may mắn. Cảm ơn!
Evan

3
@Evan bạn có thể chỉ định địa chỉ IP để liên kết trong Deluge với listen_interfacetrong bảng điều khiển deluge hoặc Giao diện trong tùy chọn Mạng.
Cas

Mặc dù đây là sự thật nhưng tôi nghĩ đây vẫn là một lời khuyên tồi ngay cả khi mục đích duy nhất của bạn là che giấu các tải xuống torrent bất hợp pháp của bạn, bạn nên sử dụng ẩn danh VPN của mình và tìm kiếm các giải pháp trên toàn hệ thống và không chỉ hoạt động cho một chương trình.
redanimalwar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.