打开Kali的设置Settings,找到Network Proxy,设置你会看到三个选项:Automatic、设置Manual、设置Disabled。设置默认是设置Disabled。切到Manual,设置面板立刻展开——HTTP Proxy、设置HTTPS Proxy、设置FTP Proxy、设置Socks Host,设置每个下面填地址和端口,设置旁边还有个"Ignore Hosts"输入框。设置这套界面跟GNOME桌面环境的设置网络代理设置长得一模一样,因为Kali用的设置就是GNOME。但很多人填完发现浏览器走代理了,终端里的wget和curl还是直连。问题出在GNOME的代理设置只管图形界面程序,命令行工具根本不读这个配置。
我刚开始用Kali的时候踩过这个坑。在Manual里填了127.0.0.1:8080,Firefox确实把流量发到了Burp Suite,但apt update照样走直连,速度慢得让人抓狂。后来才搞明白,GNOME的代理设置通过gsettings写入dconf数据库,只有调用GLib网络API的程序才会读取。终端里的工具各管各的——curl看http_proxy环境变量,apt有自己的/etc/apt/apt.conf.d/配置,git又是一套git config。
所以Manual Proxy Configuration这个界面,本质上只解决了一半问题。它管的是Firefox、Chrome这类浏览器,以及部分遵循GNOME代理设置的GTK程序。如果你只是想让浏览器流量走Burp或者ZAP,填这里就够了。HTTP Proxy和HTTPS Proxy通常填同一个地址,比如127.0.0.1端口8080。Socks Host是给SOCKS4/SOCKS5代理用的,比如你挂了SSH隧道做动态转发,就填这里。
"Ignore Hosts"那个框容易被忽略。默认里面有一长串,localhost、127.0.0.1、::1,还有.local之类的。意思是这些地址不走代理。如果你在本地跑了个Web服务做测试,不加进去的话,浏览器会把请求发给代理,代理再去连本地服务,有时候能通有时候绕晕。我习惯把内网网段也加进去,比如192.168.0.0/16,省得抓包的时候一堆内网流量混进来。
填完Manual之后有个细节:GNOME不会自动应用。你得点右上角那个开关,或者干脆关掉设置窗口再重开。有时候改了没生效,gsettings get org.gnome.system.proxy mode查一下,返回'manual'才算写进去了。想用命令行切也行:gsettings set org.gnome.system.proxy mode 'manual',然后分别设org.gnome.system.proxy.http host和port。这比点鼠标快,写脚本批量配环境的时候好用。
真正让终端也走代理,得另做功课。最省事的办法是在~/.bashrc或者~/.zshrc里加环境变量:
export http_proxy="http://127.0.0.1:8080" export https_proxy="http://127.0.0.1:8080" export ftp_proxy="http://127.0.0.1:8080" export no_proxy="localhost,127.0.0.1,192.168.0.0/16" 这样curl、wget、python的requests库都能识别。但apt不认环境变量,得单独写/etc/apt/apt.conf.d/95proxies:
Acquire::http::Proxy "http://127.0.0.1:8080"; Acquire::https::Proxy "http://127.0.0.1:8080"; git的话,git config --global http.proxy http://127.0.0.1:8080,取消就--unset。
还有个坑:Burp Suite默认监听127.0.0.1:8080,但它的证书Kali不信任。浏览器走代理之后访问HTTPS网站会报证书错误。得先把Burp的CA证书导出来,导入到系统证书库和Firefox自己的证书库里。Firefox有独立的证书存储,系统导入了它不一定认。这一步不做,HTTPS流量抓不了,只能看CONNECT请求。
Manual Proxy Configuration这个面板本身不复杂,填地址填端口的事。复杂的是Kali里各种工具各走各的代理配置,没有一个统一开关能全搞定。我的习惯是:浏览器走GNOME的Manual设置,终端走环境变量,apt单独配,git单独配。四套配置各管各的,互不干扰。换代理的时候挨个改一遍,烦是烦了点,但至少知道流量到底走没走代理。