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

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

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

发现了类似的问题但我不想强制所有流量都通过 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 连接到的本地子网范围?

感谢您的帮助!

答案1

创建vpnroute组:

sudo groupadd vpnroute

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

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

以组成员身份启动传输过程vpnroute

sudo -g vpnroute transmission-gtk &

答案2

这是一份完整的“如何操作”给新手(使用 debian)以确保 debian-transmission 用户组(即 transmission)只通过 vpn 路由数据

请勿使用基于复杂系统脚本的冗长的 VPN“操作方法”...! iptables 是最好的(并且万无一失的)方法!!!- 使用一些基于传输用户和组的 IPTABLE 规则来控制 vpn(不像许多使用 systemd 脚本、上传和下载脚本等的更复杂的“黑客”方法...)它非常简单!

步骤 1 - 设置:(假设 transmission 已安装,并且 debian-transmission 用户存在!)

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

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

sudo nano transmission-ip-rules

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

重要的

  • 如果您的本地网络不是 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

它将显示有多少数据流向哪个接口以及哪一侧是输入或输出,这样您就可以确保 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 重启方面进行了详尽测试。它运行良好。Transmission 只能使用 VPN。与其他脚本相比,此脚本的最大优势在于,如您所见,我已经确保 (通过iptables -L -v) 您的数据与通过 transmission 拉取的数据相符(通过为每个接口 eth0、vpn(tun0)添加 INPUT(全部)和 Forward(全部)规则)。这样您就知道到底发生了什么!!!数据总数不会与 transmission 完全相符 - 不幸的是,我无法在 INPUT 端区分 debian-transmission 用户,并且会有额外的开销,也许还有使用相同 VPN 的其他进程,但您会看到 INPUT 端的数据大致相符,而 OUTPUT 端的数据大约为 vpn 的一半,这确认了 vpn 正在正常工作。还有一件事情需要注意 - 断开 VPN 连接(所有流量都随着传输停止)并重新连接以进行传输需要一段时间,以便在新的 VPN 上“开始”,所以不要担心如果需要大约 5 分钟才能再次开始种子下载...

提示 - 谷歌搜索“MAN iptables”并查看这篇关于带宽监控的文章如果你想逐行了解这个脚本是如何工作的......

答案3

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

sudo如果您不是 root,请添加命令:

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

答案4

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

在 torrent 客户端中,Deluge 就是这么做的。因此,您可以安装 Deluge 并在“首选项”中配置界面,然后就大功告成了!

相关内容