渗透测试最忌VPN不稳定,扫描器或sqlmap之类的正开着跑,突然VPN就断了,立马会暴露本地真实IP地址,隔两天你就会收到顺丰快递。。。
要解决这种麻烦情况,最好是设置所有流量只能通过VPN出去,一旦VPN断线流量无法通过本地网络出去。经过测试,利用系统自带的防火墙就可以达到这个目的,Windows用自带的防火墙即可,Linux可使用iptables进行设置。
需要分三步对防火墙进行设置:
首先打开防火墙高级设置,选择左侧菜单防火墙设置,右键 -> 属性,分别在Domain、Private、Public三个tab页中,设置出站连接(Outbound Connections)为禁止(Block)。这样会默认阻止所有出站流量。
在出站规则(Outbound Rules)点击右键,新建规则,规则类型选择自定义:
程序、协议和端口选项不需要修改,直接点一下步,到Scope页,远程IP地址中选择新增IP地址,将VPN服务器的IP地址加入:
添加VPN服务器后,下一步到Action,选择允许连接:
后面不需要修改什么东西,最后添加一个名字即可,我这里命名为Allow traffic to vpn server
与上一步类似,新建出站规则,在Scope页面,IP地址设置保持默认不变。然后Interface types选择自定义:
在interface types中,选择Remote access,这是VPN链接的类型,这里表示所有通过VPN链接的流量都放行。
后面Action也选择Allow the connection
后面设置保持默认,最后添加一个名字即可,我这里命名为Allow traffic through VPN
与windows原理一样,也是分三部:
iptables -A OUTPUT -d 14.14.14.14 -j ACCEPT
iptables -A OUTPUT -d 14.14.14.15 -j ACCEPT
14.14.14.14和14.14.14.15即为VPN服务器的地址
iptables -A OUTPUT -o ppp0 -j ACCEPT
其中ppp0为VPN拨号成功后,新建的本地虚拟网卡,我测试用的l2tp协议,如果是其他协议,名字可能不同,可能是tun0
iptables -A OUTPUT -j DROP
禁止所有出口流量
综合起来iptables命令即为:
iptables -F
iptables -X
iptables -A OUTPUT -d 14.14.14.14 -j ACCEPT
iptables -A OUTPUT -d 14.14.14.15 -j ACCEPT
iptables -A OUTPUT -o ppp0 -j ACCEPT
iptables -A OUTPUT -j DROP
这样设置后,不连VPN本地所有流量都不能出去,连接VPN是可以成功的,VPN连接成功后所有流量可以走VPN出去,可以正常上网。而且就算VPN突然断线,也不会有本地流量泄露。