透明代理的意思是:客户端根本不需要知道有代理服务器的存在,只需要配置好网络即可实现代理功能,其经常用于渗透测试中,作用除去本文提到的Tor隐藏IP之外,还可以用于内网渗透,使得主机如同真正处于内网之中一样,使我们的渗透更加方便顺利。
本文的目标场景:一台主机作为网关,在该主机上搭建Tor服务并做好流量转发,实现所有以该主机网关的机器均可以直接访问Tor(不需要任何代理设置)。
由于Tor本质上是个SOCKS代理,所以理论上本文的内容对于所有的SOCKS代理均适用。
Tor的安装&配置
安装Tor:
1 2 3 4 5 6
| # CentOS sudo yum install epel-release sudo yum install tor
# Ubuntu, Kali sudo apt install tor
|
修改Tor配置文件/etc/tor/torrc
:
1 2 3 4 5 6
| # 定义Tor监听的SOCKS端口 SOCKSPort 9050
# 屏蔽五眼联盟国家节点 ExcludeNodes {fr} ExcludeExitNodes {us},{au},{ca},{nz},{gb},{fr}
|
启动Tor服务并设置为开机启动:
1 2
| sudo systemctl start tor sudo systemctl enable tor
|
Redsocks的安装&配置
仓库:GitHub - darkk/redsocks: transparent TCP-to-proxy redirector
1 2 3 4 5
| sudo yum install libevent-devel git gcc # 安装依赖 git clone darkk/redsocks cd redsocks make # 编译源代码 cp redsocks/redsocks /sbin # 放置在任意包含在环境变量的路径中即可,便于后续输入命令
|
创建配置文件/etc/redsocks.conf
,填入配置(默认配置文件位于redsocks/redsocks.conf.example
):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| base { log_debug = off; log_info = on; log = stderr; daemon = off; redirector = iptables; } redsocks { local_ip = 0.0.0.0; local_port = 50080;
ip = 127.0.0.1; port = 9050;
type = socks5; }
|
使用redsocks -c /etc/redsocks.conf
启动程序,也可以为其创建一个Systemd服务来使其可以开机自启。
创建文件/usr/lib/systemd/system/redsocks.service
,内容如下:
1 2 3 4 5 6 7 8 9 10 11
| [Unit] Description=Redsocks Service
[Service] Type=simple ExecStart=/usr/sbin/redsocks -c /etc/redsocks.conf Restart=on-failure RestartSec=1
[Install] WantedBy = multi-user.target
|
然后使用systemctl
启动并设置开机自启:
1 2
| sudo systemctl start redsocks sudo systemctl enable redsocks
|
Iptables规则的设置
注:CentOS 8中使用firewall-cmd
取代了iptables
,使得两者会产生冲突,所以务必先将firewall-cmd
对应的服务firewalld
关闭再进行操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| # 清空nat链以便后续操作 iptables -t nat -F
# 创建新链REDSOCKS iptables -t nat -N REDSOCKS -m comment --comment "Add new chain for redsocks"
# 本地网络地址放行不进行转发 iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN -m comment --comment "Skip for Intranet" iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN -m comment --comment "Skip for Intranet" iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN -m comment --comment "Skip for Intranet" iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN -m comment --comment "Skip for Intranet" iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN -m comment --comment "Skip for Intranet" iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN -m comment --comment "Skip for Intranet" iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN -m comment --comment "Skip for Intranet" iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN -m comment --comment "Skip for Intranet"
# 将REDSOCKS链上的流量全部转发至Redsocks监听的端口 iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 50080 -m comment --comment "Redirect traffic to tor"
# 将Tor流量不进行转发(若全部流量都进行转发则Tor将无法正常运行) # 使用UID进行流量的过滤,查看Tor进程的启动用户: ps -ef | grep tor iptables -t nat -A OUTPUT -p tcp -m owner \! --uid-owner $(id -u toranon) -j REDSOCKS # iptables -t nat -A OUTPUT -p tcp -j REDSOCKS -m comment --comment "From OUTPUT jump to REDSOCKS"
# 路由前的数据包也全部跳转到REDSOCKS链 iptables -t nat -A PREROUTING -p tcp -j REDSOCKS -m comment --comment "From PREROUTING jump to REDSOCKS"
# 设置域名白名单 whitelist_domains=("baidu.com" "zhihu.com" "csdn.net" "cnblogs.com") for e in ${whitelist_domains[@]} do iptables -t nat -I REDSOCKS -j RETURN -d $e -m comment --comment 'Whitelist domain: '"$e" done
|
将上述命令保存为脚本,以root运行即可。
临时关闭/开启命令:
1 2 3 4 5 6 7 8
| # 临时关闭 iptables -t nat -j RETURN -I REDSOCKS
# 重新开启 iptables -t nat -j RETURN -D REDSOCKS
# 查看Iptables链状态 iptables -t nat -nvL --line-number
|
DNSCrypt搭建本地DNS服务器
参考教程DNSCrypt简明教程即可。(搭建完成后需要将网关机的系统DNS服务器修改为127.0.0.1)
测试是否成功
任意需要访问Tor服务的主机,将网关设置为该主机的IP地址即可,然后访问https://check.torproject.org,成功截图如下:
参考资料