当前位置: 首页>>技术教程>>正文


server – 如何确保传输流量使用VPN?

, , ,

问题描述

我想确保传输仅在其运行的服务器连接到VPN时发送/接收流量。

我是found this question which is similar,但我不想强制所有流量通过VPN,而且我还无法从命令行中找到有关如何使用firestarter的良好指南。

取而代之的是我考虑使用ufw,但是我几乎没有防火墙的经验,我希望社区能够为我提供帮助。

我的一个想法是强制传输使用特定端口,例如33442,然后仅允许从VPN服务器的IP地址往返于该端口的流量。我查看了Ubuntu服务器指南,并认为可以执行以下操作:

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

这种逻辑是否固执己见?你会怎么做?我将对VPNIP(VPN服务器的公共IP)使用什么,还是应该指定VPN将我连接到的本地子网范围?

谢谢你的帮助!

最佳答案

创建vpnroute组:

sudo groupadd vpnroute

添加一个iptables规则,该规则拒绝不通过tun0接口的vpnroute组的成员建立的任何传出网络连接:

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

vpnroute组的成员身份开始传输过程:

sudo -g vpnroute transmission-gtk &

次佳答案

这适用于无头传输,我根据运行传输服务的用户来限制流量,10.0.0.0/8是您的内部网络,应更改它以匹配您的网络,tun0是您的OpenVPN接口,eth0是您的LAN连接。

如果您不是root用户,请将sudo添加到命令中:

iptables -F(我们使用-F开关刷新所有现有规则,因此我们从一个干净的状态开始,从中添加新规则。)

iptables -L(列出当前设置)

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

重新启动后使iptables持久

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

第三种答案

这是NOOBS的完整’HOW TO'(使用debian),用于确保debian-transmission用户组(即传输)仅通过vpn路由数据

不要基于复杂的系统脚本,将冗长的’How to’用于VPN …! iptables是最好的(也是万无一失的)方法!!! -根据传输用户和组使用一些IPTABLE规则来控制vpn(不像许多更复杂的’hack’方法,它们使用systemd脚本,up和down脚本等…)非常简单!

步骤1-设置:(假设已安装传输系统,因此存在debian-transmission用户!)

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

第2步-创建transmission-ip-rules文件

sudo nano transmission-ip-rules

并从#!/bin/bash开始在下面的代码块中添加文本

IMPORTANT

  • 如果您的本地网络不是192.168.1.x格式,请更改NET变量以对应于您自己的本地网络寻址格式!

  • 另请注意,192.168.1.0 /25实际给出的范围是192.168.1.0-255!

  • 有时您的接口eth0,tun0(这是vpn)等。可能有所不同-请检查’ifconfig’并根据需要进行更改。

#!/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

保存文件,然后运行

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

然后确保这些规则在两次重启之间仍然存在:

sudo dpkg-reconfigure iptables-persistent

并点击是到两个提示。完成!

该脚本的最大优点是它将跟踪设备中的所有数据!当您发出

sudo iptables -L -v

它会显示将去往哪个接口以及哪一侧的INPUT或OUTPUT的数据量,因此可以确保vpn脚本正常工作。例如;

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

此脚本已经过vpn连接,断开连接,重新引导的详尽测试。效果很好。传输只能使用VPN。与其他脚本相比,该脚本的最大优势是,您已经确保(通过iptables -L -v)可以看到,您的数据与传输的内容一致(通过为每个接口eth0添加INPUT(全部)和Forward(全部)规则) ,vpn(tun0))。所以你确切地知道发生了什么!数据总数与传输数据将不完全相符-不幸的是,我无法在输入方面与debian-transmission用户区分开,并且这会产生额外的开销,并且使用同一VPN的其他进程可能也很多,但是您会在输入侧,大约在VPN的输出的一半,以确认其工作。另一件事要注意-VPN断开连接会花费一些时间(传输停止所有流量),然后重新连接以传输到新VPN上的’get going’,因此不用担心大约需要5分钟才能再次开始洪流…

提示-Google ‘MAN iptables’,如果想逐行了解此脚本的工作原理,请参阅this article on bandwidth monitoring

第四种答案

理想情况下,您应该使用具有绑定到特定接口(VPN接口)功能的torrent客户端。

在洪流客户中,Deluge就是这样做的。因此,您可以安装Deluge并在“首选项”中配置界面,然后就设置好了!

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9189.html,未经允许,请勿转载。