1 Squid的介绍 1.1 前言简介 代理服务器(Proxy Server)的功能是代理网络用户去取得网络信息。形象地说,它是网络信息的中转站,是个人网络和Internet服务商之间的中间代理机构,负责转发合法的网络信息,对转发进行控制和登记。 [1] Squid服务器缓存频繁要求网页、媒体文件和其它加速回答时间并减少带宽堵塞的内容。 Squid是开源免费的,可以直接到官网查看 安装好后输入指令查看一下状态 sudo systemctl status squid如果绿色字是active(running)就是正常运行,不然就要查看一下下面的logfile显示哪里有错误,如果是未开启的,则输入指令开启,下面有几种常用的指令 sudo systemctl status squid # 查看状态 sudo systemctl start squid # 开启服务 sudo systemctl stop squid # 停止服务 sudo systemctl restart squid # 重启服务查看日志 journalctl -xeu squid.service 2.2 搭建的环境需要一台服务器安装好Squid,需要双网卡双IP: 先配置内网电脑IP 因为没网关,正常情况下是无法上网的。 再配置能连接外网的服务器IP 测试服务器能否上网 最好查看双IP是否生效 ping 172.28.28.104 ping 172.28.18.92输入上面指令都通的情况就说明生效了 主配置文件一般都在/etc/squid/squid.conf,我们需要先复制一份做备份,预防修改坏了,使用指令 sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak然后再进行编辑sudo vim /etc/squid/squid.conf,我们找到配置IP地址的那行,默认是没有172.28.0.0/16的,我们环境需要添加一行,再这里我们也能找到默认端口号3128 acl localnet src 172.28.0.0/16acl:访问列表 然后在编辑子配置文件sudo vim /etc/squid/conf.d/debian.conf,将http_access allow localnet取消注释 最后我们重启一下Squid服务,每次修改配置文件后都需要重启Squid服务来生效 sudo service squid restart 3.2 配置代理服务器内网电脑正常情况是无法上网的,如图: 我们需要在internet选项设置,依次选择连接→局域网设置 打开局域网设置后,勾选代理服务器,地址填写服务器的内网IP172.28.18.92,端口写3128,然后点确定 我们尝试打开网页,发现可以正常打开网页,其实是不通的。实际我们是通过服务器来上网的。 大部分软件也可以通过添加代理服务器的方式来上网,例如QQ,微信之类,设置方式不尽相同,这里就不展示了。 4 限制访问我们可以通过修改配置文件来达到限制用户上网,配置文件是通过从上往下来读取指令的。 4.1 限制IP访问我们可以通过限制固定IP来上网,需要在配置文件里分别位置添加 acl badhost src 172.28.18.7 http_access deny badhosthttp_access:加载访问列表 因为是从上往下读取的关系,因此需要在http_access allow localhost的上面添加http_access deny badhost。 因为只限制了一个IP,只要换个IP就正常了,也可以限制一个IP范围 acl badhost src 172.28.18.7-172.28.18.10 4.2 规定时间内禁止上网在配置文件里相关地方添加相关语句 acl worktime time MTWHF 17:00-18:00 http_access deny worktime 4.3 禁止访问指定服务器IP例如禁百度网址,先查看望都网站的IP,在Windows可上网的电脑上打开命令窗口,然后输入nslookup,再输入,红框里的IP就是百度网站的IP。这种大型网站一般都会变动,每个人查看的IP都不尽相同。 在配置文件里相关地方添加相关语句 acl baddst dst 183.240.98.198 acl baddst dst 183.240.98.161 http_access deny baddst 4.4 禁止访问指定的域名在配置文件里相关地方添加相关语句,可以用空格来一行多个 acl baddomain dstdomain .taobao.com .pinduoduo.com http_access deny baddomain 4.5 访问列表组合例如禁止区域IP访问指定域名 http_access deny badhost baddomain 4.6 # 禁止访问IP地址的网址需要使用正则表达式来写条件,这样就能杜绝ban了域名还能用IP来访问网站了 acl xhost dstdom_regex ((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9]) http_access deny xhost 5 Squid支持WebSocket配置资料来源于:https://cloud-atlas.readthedocs.io/zh-cn/latest/web/proxy/squid/squid_websocket.html Squid从 v5 版本开始,支持 http_upgrade_request_protocols 配置参数,允许客户端发起的控制和服务器确认机制通过使用HTTP/1.1 Upgrade机制转换成其他协议。 配置 /etc/squid/squid.conf 添加: http_upgrade_request_protocols WebSocket allow all需要注意,版本低于 squid v5 无法解析上述配置。例如 Ubuntu 20.04.3 LTS 发行版提供的是 4.10 版本Squid 会出现报错。解决方法是 6 透明代理 6.1 安装ssl版本Squid需要使用透明代理的情况,需要另外安装ssl版本。因为需要使用到ssl。 sudo apt-get install squid-openssl 6.2 配置http透明代理网页一般使用两种端口,一个是http的80端口,一个是https的443端口。 https则需要用到ssl证书,这里演示就生成测试用的证书。 mkdir -p /etc/squid/certs/ cd /etc/squid/certs/ # This puts the private key and the self-signed certificate in the same file openssl req -new -newkey rsa:4096 -sha256 -days 3650 -nodes -x509 -keyout myCA.pem -out myCA.pem # This can be added to browsers openssl x509 -in myCA.pem -outform DER -out myCA.der其中openssl req -new -newkey rsa:4096 -sha256 -days 3650 -nodes -x509 -keyout myCA.pem -out myCA.pem意思是: 编辑Squid配置文件,在http_port 3129 intercept下面添加 https_port 3130 ssl-bump tls-cert=/etc/squid/certs/myCA.pem generate-host-certificates=on dynamic_cert_mem_cache_size=4MB transparent我们使用3130端口代替https的443端口,tls-cert指定证书位置(需要绝对位置),transparent:透明代理情况下传输数据。 先查看一下防火墙,这里使用iptables sudo iptables -t nat -A PREROUTING -s 172.28.0.0/16 -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3130 sudo iptables -t nat -A PREROUTING -s 172.28.0.0/16 -i eth1 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3130 sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo iptables -t nat -A PREROUTING -s 172.28.0.0/16 -j DNAT -p tcp --dport 53 --to 172.28.18.1 sudo iptables -t nat -A PREROUTING -s 172.28.0.0/16 -j DNAT -p udp --dport 53 --to 172.28.18.1第一和第二句代表80和443端口转发到代理服务器上: 添加完毕后可以输入指令sudo iptables -t nat -L查看状态: 因为博主第一台机体已经投入生产了,只能弄第二台服务器来演示透明代理。这里博主的第二台服务器IP发生了少许变化。 所以客户机设置的IP为: 打开internet属性下的内容,打开证书,点击导入 配置是限制taobao网,如果没有导入证书,会一直多一步提示有证书危险,可以直接点击忽略就行了。 Squid还有很多功能,这里就不一一展示了,可以去官网查看。Squid是一个很强大的代理服务器。或者你们想知道什么功能,我可以查看一下有没这功能, 怎样实现。 (责任编辑:) |